刚接触protobuf通过service实现rpc真的是一头雾水,相关资料非常少,找到的资料也看不懂,最后找到了两篇博文,非常详尽,看完就懂了。
这时第一篇:http://nightfade.me/post/tech/2013-12-13-dive-into-protocol-buffers-python-api
第二篇:http://nightfade.me/post/tech/2013-12-15-implement-an-asynchronous-rpc-basing-on-protocol-buffers
这个是作者通过protobuf service 完整实现的rpc:https://github.com/nightfade/protobuf-RPC
然后我按照自己对文章和代码理解做了各简单粗略的笔记:
rpcChannel:接收请求时调用service定义的方法。
callmethod必须定义,用来序列化反序列化数据和发送数据。
rpcController:管理rpcChannel,比如捕获网络异常。
编译会生成service和service_stub。它们对应着。
service定义proto文件中定义的方法,用来被调用。
service_stub继承rpcChannel,用来调用service定义的方法。
直接stub对象.service方法就行了。比如service定义了echo方法,stub.echo就回去调用echo方法。
一个释疑:
rpchannel需要自己实现一个callmethod,用来将数据序列化,病发送出去
,这个method在stub.service_function的时候会自动调用。
service的callmethod,这个不需要自己实现,只要调用的时候传递给他合适的参数,
会自动查找并调用service定义的方法。
本人出于个人兴趣,创建了一个个人公众号,每天筛选国外网友发现的有趣的事情推送到公众号,欢迎关注!