马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
x
rpc全称远程过程控制,说白了是一种对信息发送和吸取的规则编写方法,来自google,这些规则会以protobuf代码存到proto文件里。我以autoGen中agent_worker.proto为例,大概长如许
为什么要用protobuf定义rpc呢?首先,rpc是一种比http和restapi更轻量的协议,应该都知道http要有http头,header,rpc采用更紧凑的编码方式,具体我也不懂,反正它的协议叫做gRPC。然后,为了让rpc盛行起来,须要一个在各种语言中都能被使用的方法,protobuf作为一种中间语言,在编写后可以被编译成各种语言的版本,然后供各语言的代码调用,这个编译器叫protoc,c是complier。
你可以简单地把proto代码看作是对数据布局的定义,就像python的dataclass一样。有几个字段须要解释:
oneof:它内里会包含多个变量名,在你实例化对应数据类时,只能出现此中一个变量,其他的不可用。
map:看作dict。
repeat:看作list。
packed:是跟在某些数据类型的变量背面的定义,用于注明这些值是否须要精简地序列化,proto3里默认开启。
enum Status:定义一个枚举数据类型Status。像python一样,Status会定义一个名字并附上具体的值,之后可以用Status定义其他变量的类型。
message:定义发送的信息的数据布局。
数据类型:在变量名前面注明,可以是某个定义完的数据布局,和python一样。
变量 = 数字:数字是编号,用于数据在序列化和反序列化时作标记和识别。因此,它可以不是顺序的,可以随便定义(但是最好别如许做)。
service:与message平级,用于定义一个服务所提供的全部rpc服务。
rpc:注明这是一个rpc服务,将注明发送和吸取的message样式。
stream:注明这是一个流式传输。如果不是流式传输,rpc服务只会做到“客户端发送message,服务端返回对应的message”,就像一个request一样。
nest message:它只是一种嵌套形式,在message里定义一个message,毕竟message也是一个变量类型。
reserved:可以用来预留编号和变量名。
DynamicMessage:它用来支持动态剖析,在不知道来犯的message类型时,对方可能同时传过来一个proto文件的descriptor文件,用它来动态剖析message。
protobuf已经到protobuf3了,之前全部参数都可以注明可选or必选,现在都是可选。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |