什么是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

08-28 11:47