protobuffers实现中的回调 - ?

时间:2013-10-04 14:03:28

标签: callback protocol-buffers rpc

有没有办法在proto语法中定义回调rpc过程?我正在尝试定义RPC调用以在RPC服务器上启动数据处理过程/循环,这会将结果异步写回RPC客户端...任何想法? 感谢

2 个答案:

答案 0 :(得分:2)

这是一个非常合理的想法,但对于RPC实现来说却是一件非常困难的事情。一旦你有能力在运行时引入新的调用端点,你需要一种方法来垃圾收集它们,你需要延迟补偿(这样当一个方法返回对另一个可调用对象的引用时,客户端就可以开始向它发送调用而无需等待对于网络往返),您可能需要将对象传递到网络中的其他计算机而无需代理。几乎没有协议实现所有这些 - CapTP是我所知道的唯一一个,并且它与一种模糊的编程语言联系在一起。

由于复杂性,Protocol Buffers从未以一般方式支持此功能。基于Protobuf的单个RPC系统可能包含某些用例的特殊情况,例如服务器为了响应单个调用而“回送”多个消息。但是,.proto语言语法除了对单个对象进行简单方法调用之外没有特别的表达方式,其中客户端严格来说是调用者。

FWIW,我目前正在研究一种新的替代方案,它具有CapTP的功能,但具有协议缓冲区的实用性,称为Cap'n Proto。但是,RPC实现还需要几个月的时间。 (我也是Protocol Buffers v2的作者。)

答案 1 :(得分:0)

如果您在java世界中,可以使用https://code.google.com/p/protobuf-rpc-pro/库在“连接”的两端定义RPC服务 - 并从服务器到客户端反向RPC。在标准的google protobuf RPC接口中,没有规定将数据恢复到不在RPC响应中的客户端。