1

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

4

2 回答 2

2

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

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

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

于 2013-10-07T21:22:47.440 回答
0

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

于 2013-10-05T10:00:26.343 回答