protobuf实例
通过一个注册登录的例子,熟悉一下如何使用protobuf将数据传输给服务端。
登录信息包括5个数据:
- user_name
- password
- online_status
- client_type
- client_version
- 编写proto文件如下,将登录的数据结构放在message 字段。message 是一个关键字,后面跟上自定义的消息名称,如IMLoginReq:
syntax = "proto3"; // proto2和proto3 版本
package IM.Login; //IM::Login -> package IM.Login 类似于命名空间
import "IM.BaseDefine.proto"; // 引用文件 引用其他的proto文件
option optimize_for = LITE_RUNTIME; //编译优化
//IMLoginReq:描述的一个类
message IMLoginReq{
//cmd id: 0x0103
string user_name = 1;
string password = 2;
IM.BaseDefine.UserStatType online_status = 3;
IM.BaseDefine.ClientType client_type = 4;
string client_version = 5;
}
注意:后面的字段编号,需要按照顺序从1开始规则定义,最小编号是 1,最大的是 2^29 -1即536,870,911,其中 19000 到 19999不能使用(内定为Protocol Buffers使用)。
- 客户端和服务端都会保存这个proto文件。并且通过protoc编译
protoc -I=$SRC_DIR --cpp_out=$DST_DIR $SRC_DIR/xxx.proto
将上面的proto文件生成.cc和.h文件,生成的文件中有一些接口之后需要使用到。
- 客户端设置message类中的相关信息,设置IMLoginReq中5个类型的数据如下所示:
// 设置登录信息
IM::Login::IMLoginReq msg;
msg.set_user_name("liaoqingfu");
msg.set_password("123456")