protobuffers 实现中的回调-?
Posted
技术标签:
【中文标题】protobuffers 实现中的回调-?【英文标题】:callback in protobuffers implementation -? 【发布时间】:2013-10-04 14:03:28 【问题描述】:有没有办法在 proto 语法中定义回调 rpc 过程?我正在尝试定义 RPC 调用以在 RPC 服务器上启动数据处理过程/循环,它将结果异步写回 RPC 客户端......有什么想法吗? 谢谢
【问题讨论】:
【参考方案1】:这是一件非常合理的事情,但对于 RPC 实现来说却是一件非常困难的事情。一旦你有能力在运行时引入新的调用端点,你需要一种垃圾收集它们的方法,你需要延迟补偿(这样当一个方法返回对另一个可调用对象的引用时,客户端可以开始向它发送调用而无需等待对于网络往返),并且您可能需要在没有代理的情况下将对象传递到网络中其他机器的方法。几乎没有协议实现所有这些东西——CapTP 是我所知道的唯一一个,它与一种晦涩难懂的编程语言相关联。
由于复杂性,Protocol Buffers 从未以一般方式支持这一点。单个基于 Protobuf 的 RPC 系统可能包含某些用例的特殊情况,例如服务器“流”回多个消息以响应单个调用。但是,.proto
语言语法除了对单例对象的简单方法调用之外没有特定的表达方式,其中客户端是严格的调用者。
FWIW,我目前正在研究一种新的替代方案,它具有 CapTP 的功能和 Protocol Buffers 的实用性,称为Cap'n Proto。然而,RPC 的实现还有几个月的时间。 (我也是 Protocol Buffers v2 的作者。)
【讨论】:
【参考方案2】:如果您在 Java 世界中,您可以使用 https://code.google.com/p/protobuf-rpc-pro/ 库在“连接”的两侧定义 RPC 服务 - 并执行从服务器到客户端的反向 RPC。在标准的 google protobuf RPC 接口中,没有规定将数据返回给不在 RPC 响应中的客户端。
【讨论】:
以上是关于protobuffers 实现中的回调-?的主要内容,如果未能解决你的问题,请参考以下文章