2013-10-04 86 views
1

有沒有一些方法來定義proto語法中的回調rpc過程?我正在嘗試定義RPC調用來啓動RPC服務器上的數據處理過程/循環,這會將結果異步地寫回RPC客戶端...任何想法? 謝謝protobuffers實現中的回調 - ?

回答

0

如果你在java世界,你可以使用https://code.google.com/p/protobuf-rpc-pro/庫在「連接」的兩端定義一個RPC服務 - 並且將RPC從服務器反轉回客戶端。在標準的google protobuf RPC接口中,沒有規定將數據返回給不在RPC響應中的客戶端。

2

這是一個非常合理的想要的事情,但對於RPC實現提供的令人驚訝的困難。一旦你有能力在運行時引入新的呼叫端點,你需要一種方法來垃圾收集它們,你需要延遲補償(以便當一個方法返回一個對另一個可調用對象的引用時,客戶端可以開始向它發送調用而不用等待用於網絡往返),並且您可能需要將對象傳遞到網絡中的其他計算機而無需代理。幾乎沒有協議實現所有這些事情 - CapTP是我所知道的唯一一個,它與一種晦澀的編程語言綁定在一起。

由於併發症的原因,協議緩衝區從來不會以一般方式支持此操作。單個基於Protobuf的RPC系統可能包含特殊情況下的特定用例,例如服務器爲響應單個調用而「流」多個消息。但是,.proto語言語法沒有特殊的方式來表示除了客戶端完全是調用者的單例對象上的簡單方法調用之外的任何其他方法。

FWIW,我目前正在研究一種新的替代方案,它具有CapTP的特性,但是Protocol Buffers的實用性,稱爲Cap'n Proto。但是,RPC的實施還有幾個月的時間。 (我也是Protocol Buffers v2的作者)。