Protobuf
什么是protobuf
protobuf全称是**Protocol Buffers**。是QQ等IM采用的协议,比XML,JSON,结构体的传输效率都高的一种传输协议,由Google发明。与XML相比,protobuf序列化后的更短,速度更快,反序列化只需要一行代码。
protobuf的工作流程
syntax = "proto3"; message SearchRequest { string x = 1; int32 xxx = 2; int32 XXXX = 3; }
- 第一行表示使用proto3语法,如果没有指定,编译器会默认使用proto2语法。这个指定语法行必须是文件的非空非注释的第一行
- 然后表明了消息的格式,有一些常见的类型,消息类型中可以嵌套其他的消息类型
- 向.proto中添加注释,和c++一样用双斜杠表示//
.proto文件生成了什么
当用protocol buffer编译器来运行.proto文件时,编译器将生成所选择语言的代码,这些代码可以操作在.proto文件中定义的消息类型,包括获取、设置字段值,将消息序列化到一个输出流中,以及从一个输入流中解析消息。
- 对C++来说,编译器会为每个.proto文件生成一个.h文件和一个.cc文件,.proto文件中的每一个消息有一个对应的类。
- 对Java来说,编译器为每一个消息类型生成了一个.java文件,以及一个特殊的Builder类(该类是用来创建消息类接口的)。
- 对Python来说,有点不太一样——Python编译器为.proto文件中的每个消息类型生成一个含有静态描述符的模块,,该模块与一个元类(metaclass)在运行时(runtime)被用来创建所需的Python数据访问类。
这里有一个各种语言的API文档
参考文档:
https://www.cnblogs.com/tohxyblog/p/8974763.html
https://www.cnblogs.com/chenyangyao/p/5422044.html