以小见大——那些基于 protobuf 的五花八门的 RPC(4)

赖勇浩(http://laiyonghao.com

protobuf-rpc-pro

不知道你还记不记得 protobuf-rpc,这货在后面加了个 pro,就真的重量级了许多。照例先看看简介:A java ProtocolBuffers RPC implementation featuring bidirectional calls,特点是双向调用,跟之前的看的 rpc 都不一样。姑且按下不表,单来看看基本格式文件,http://code.google.com/p/protobuf-rpc-pro/source/browse/trunk/protobuf-streamer-pro/src/main/protos/protobuf-stream.proto ,全文如下:

哇,好长好长,一定是场硬仗。Protobuf-rpc-pro 的特点就是双向调用,所以有 pull 和 push 两种 request message,让人纠结的是,其实他们是一样的,简单地采用 32 位 ID 加序列化后的 message 方案。响应包叫做 Chunk,独特的地方是一个响应包,可以分在若干个 Chunk 中发送到另一端,这样的话如果返回的结果很大,也算是有内置的解决方案了。带了一个 pro 的东西,就是比较重量级啊。这个特性是通过 chunkType 和 seqNo 两个字段共同来完成的,chunkType 用以标识起始点,而 seqNo 用来组织顺序。repeated Parameter parameter 的作用是传递一些扩展的参数,这些参数可能在处理 payload 的时候用得着,而这个 payload 是序列化的 message,它才是调用返回的结果(或结果的一部分)。
最后来看一下 WirePayload,现在来看,这货就简单了,跟 protobuf-rpc 中的 message Rpc 或 protobuf-remote 中的 message RpcMessage 是一样的封装类,见得多了也就没什么好说。
看来带 pro 的设计的确是考虑得比较周全,刚才还有一个 message CloseNotification 一直压着没谈,现在来说一下:它用来告知另一端自己马上就要关闭服务了。关于这一点,我觉得利用 TCP 本身的是半关闭特性就够了,没有必要做这个。

server1

server1 出自国人之手,是一个利用了 Boost 的 a c++ network server/client framework,它的作者 xiliu tang 是我的前同事。server1 的代码还是非常简明的,先来看一下基础格式:http://code.google.com/p/server1/source/browse/trunk/server/meta.proto ,全文如下:

很简单,只有一个 message MetaData?对的。感觉上跟 protobuf-rpc 差不多,两个不同:一是 MetaData 带了一个 Type,用来标明它是请求还是响应;还有一个是 MetaData 使用了无符号 64 位整型作为 ID。使用 type 字段我个人感觉比 repeated/optional 的方式比起来有点没有充分利用到 protobuf 特性的感觉,不过相当地清晰明了。还有就是 response_identify 我专门在 GTalk 上问过作者,他说记不起为什么要加这个字段了……囧。我的看法是这个字段是不必要的。嗯,这个设计真的很简洁,不过,我不喜欢 Meta 这个命名。
===== 未完待续 =====

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Protobuf-rpc是一种基于protobuf的远程方法调用(RPC)框架。它提供了服务器端和客户端的实现,其中服务器端仅支持Java,而客户端则支持Objective-C和JavaRPC是一种封装了网络协议和序列化、反序列化功能的通信框架,而protobuf-rpc使用protobuf实现了序列化和反序列化的功能。通过protobuf-rpc,客户端可以像调用本地方法一样调用远程接口方法,实现了透明调用机制,让使用者不必显示区分本地调用和远程调用。这使得开发人员可以很方便地在分布式系统中进行远程方法调用。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [protobuf-rpc:protobuf-rpc 是一个基于 Google ProtocolBuffer 的 RPC 框架。 目前 protobuf-rpc 支持 ...](https://download.csdn.net/download/weixin_42123296/19257793)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [protobuf+RPC技术](https://blog.csdn.net/weixin_27015375/article/details/114350163)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [python如何通过protobuf实现rpc](https://download.csdn.net/download/weixin_38599545/13771570)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值