首页protobuf › 我的Protobuf消息设计原则(续)–实践

我的Protobuf消息设计原则(续)–实践

1.首先为 聊天服务器(Chat)定义google protobuf的协议接口文件

接口主要遵循 Request、Response、Notification(Indication),Command(本文未出现)四大消息分类,并且使用Message顶层消息把Request、Response,Notification等包含起来;并定义一个MSG枚举值,用于表示具体的消息值(在google protobuf RPC过程中,其实 每个service方法就是一个Request和Response的应答对,只不过其消息值的编码是RPC自动分配的)

2.工程实例

服务器和客户端均使用C#语言开发,主要是考虑到Net集成的网络框架使用起来比较方面,做实例工程比较快;

google protobuf官方的第三方支持库下载protobuf的NET版本

具体工程文件可以从此下载: http://download.csdn.net/detail/chenxiaohong3905/7654087

通信模式采用TCP,在protobuf的二进制基础上追加了 4个字节的包头,用于表示protobuf 二进制数据的长度(不包含4字节自身)

3. wireshard 抓包分析

普通的wireshark版本是不支持protobuf抓包解析的,可以下载http://download.csdn.net/detail/chenxiaohong3905/7244655 版本(需要10 CSDN积分,后面要取消,无法取消积分,上传新的文件也没资格了)

安装完下载的版本后需要对齐进行配置 在wireshark安装目录下有个protobuf的文件夹用于存放所有 要解析的protobuf文件和配置;

注意事项: 每一个端口只能对应一个顶层消息 ,至于为何每个端口只能有一个顶层消息可以去cnblog参考陈硕的文章,里面关于protobuf的描述已经解释了这个问题; protobuf 文件可以包含其它protobuf接口文件,会自动加载,配置的时候只需要指定顶层消息所在的proto文件即可;

里面vcs.conf是一个配置实例

对于 聊天服务器的配置可以如下:

把 protocol.proto文件复制为 wireshark/protobuf文件夹下面,并穿件一个 文件 protocol.conf 输入一下内容即可

name 为顶层消息的名称, port为源或目标的端口之一,不管是TCP,UDP都会尝试解析;如果port端口有其它协议优先注册了,则无法解析为protobuf,需要手动解析;

3.1 连接建立 , 服务器推送 Welcome_Notification消息到客户端

此流程非必须,只不过为抓包而演示
232630_97LB_1362

GoogleProtocolBuffer , Length 59 描述了 Message 消息二进制的总长度

3.2 登录聊天服务器

232835_SDzJ_1362
232836_dR2v_1362

3.3. 获取朋友列表

简单的推送服务器的所有已经登录的用户,包含当前用户
232932_BEMh_1362
232933_RDT1_1362

3.4 用户通知

当用户登录或者注销时通过其它用户
233035_kZWT_1362
233035_xLjj_1362

3.5 发送消息与消息推送

只演示发送广播消息,所有用户都会接收到包含自己
233223_VaYI_1362
233224_ZQOu_1362
233226_gSZ5_1362

3.6 注销

233318_2zXw_1362
233319_wOtj_1362

发表评论