-
序列化协议有:json,xml,protobuf
-
序列化:将数据结构或者对象转化成二进制数据(json是将数据结构或对象转化成字符串数据)
-
反序列化:和序列化相反
-
使用序列化需要考虑的几点:1)是否占用带宽 2)占用的CPU和内存 3)是否支持多语言
-
protobuf:是谷歌内部开发,
作用:结构化数据存储,通信协议
特点:使用http传输的时候,抓包只能抓到二进制数据,如果是RESET API提供第三方库的时候,不建议使用pb,建议使用json。
优点:速度快+数据小
场景:传输量大&网络环境不稳定的数据存储,RPC数据交换。 -
protobuf例子
protobuf是可以进行嵌套的
person
string name
int id
string email
phone[] //一个或者多个电话(号码+类型)
使用protobuf协议进行序列化的数据
message Person{
string name=1;
int id=2;
string eamil=3;
enum PhoneType{
MOBILE=0;
HOME=1;
WORK=2;
}
message PhoneNumber{
string number=1;//电话号码
PhoneType=2;//电话类型
}
repeated PhoneNumber phones=4; //一个或者多个电话号码
}
message AddressBook{
repeated Person people=1; //0个或者多个联系人
}
//end messages
在实现增加一个人的时候,直接使用add_people()就可以了
问题1:报文和protobuf的关系?
报文存储的是二进制数据,只不过这个二进制是protobuf进行序列化的,解析出来的报文体,再进行反序列化就可以得到数据结构或对象了
问题2:使用http还需要接口接收转发数据,和接收模块了吗?
需要的,http服务是客户端和服务端,一般使用的是json来传递信息,也可以使用text,这个框架里一般会定义的。
protobuf使用的例子,暂时还不是很理解,后续有需要会再学习并且补充。