最近使用protobuf搭了些服务器,对protobuf的机制略感兴趣,所以研究了下。
大致分析没有什么复杂的
1 对定义的结构体生成消息封包协议
2 对定义的rpc函数生成接口定义
3 用户按protobuf的接口定义实现对应的调用接口
实现上,也颇简单比如如下的一个protobuf文件
// ConnectServerRequest和ConnectServerReply是客户端和服务端建立连接后的第一个RPC请求 // 该请求不包括认证过程,认证过程由Entity去处理,这个只是建立连接,从而启动Entity通信流程 message ConnectServerRequest { enum RequestType { NEW_CONNECTION = 0; // 新登录 RE_CONNECTION = 1; // 断线快速重连 BIND_AVATAR = 2; // 重新绑定entity到avatar } optional bytes routes = 1; required RequestType type = 2; // 认证类型 optional bytes deviceid = 3; // 设备 id, 标示客户端,可用mac地址 optional bytes entityid = 4; // 断线重连或者BIND_AVATAR的时候需要的avatar entity id optional bytes authmsg = 5; // 验证消息 } // 客户端发给Gate服务器 service IGateService { // 连接服务器,进行认证 rpc connect_server(ConnectServerRequest) returns (Void); }