2013-10-02 55 views
1

我有一個應用程序,需要將運行在Windows上的.NET應用程序的命令發佈到通過兩臺機器之間的專用以太網連接在Linux上運行的C++應用程序。具有大量消息的跨平臺RPC

而不是滾動我自己的協議,我寧願使用一些標準形式的RPC。以前,我已經使用XML RPC作爲跨平臺應用程序,但是這些特定的命令需要包含大量的數字數據(每個命令有數千個雙浮點值),並且頻繁地發送命令,所以我想到了某種二進制序列化更合適。因此,我開始研究Protocol Buffers。

所以,有幾個問題:

  1. 我知道,Protocol Buffers的定義序列化格式,但有如何使用它們來執行跨平臺RPC任何公認的行業標準?
  2. 協議緩衝區是否非常適合用可變大小的數組表示嵌套數據結構?每個命令的點數是可變的,部分數據的最自然表示是一個結構數組,每個結構都包含一個點數組。所有這些數組對於任何給定的命令都將具有可變大小。
  3. 使用協議緩衝區進行跨平臺通信時遇到任何問題嗎?

回答

2
  1. 不,沒有公認的標準。一些庫自帶RPC實現,但沒有一個似乎特別受歡迎。

  2. 在我看來很不錯。一些庫甚至允許延遲解碼,所以如果你只需要一部分數據,你就不需要解碼所有的嵌套結構。

  3. 除了沒有定義RPC格式之外,沒有定義消息的成幀。所以你必須做一些自定義的方法,比如在開始時添加一個長度字段。另一個未定義的部分是如何識別正在傳輸的消息的類型。確保爲自己的項目明確定義這些。