簡體   English   中英

在java中組合UDP和RPC的最簡單,最有效的方法是什么?

[英]What's the easiest and most efficient way to combine UDP and RPCs in java?

我正在考慮在我的一個項目中使用java(出於與網絡無關的原因)。 目前我正在使用C ++和基於UDP構建的自定義協議。 我的問題在於,雖然增加的效率對於發送大量實時數據很有用,但我寧願在RPC中使用一些純粹的“邏輯操作”,例如登錄。 但是C ++中的RPC很難做到,因為標准C ++本身沒有序列化的概念。

在另一個答案中,我發現了Java的RMI,它似乎與RPC類似,但我找不到它的效率/響應能力,也不能將它插入我現有的UDP套接字,因為我不希望有在我的服務器程序上打開兩個端口。

或者,因為我認為Java有序列化,我可以自己實現RPC,這取決於在java中對任意對象流進行反序列化是多么簡單。 盡管如此,如果這需要花費數天時間來學習java的內在函數,這對我來說也不是一個選擇。

如果您對RPC感興趣,總會有XML-RPCJSON-RPC ,它們都有免費/開源的C ++實現。 不幸的是,我的大部分開發都是用Java編寫的,所以我不能說它們的可用性或有效性,但它可能是值得研究的,因為它聽起來你已經在C ++中做了一些工作並且對它感到滿意。 它們還具有Java實現,因此如果您想沿着這條路線前進,您甚至可以使用XML-RPC或JSON-RPC支持Java和C ++應用程序。

唯一的缺點是看起來大多數都使用HTTP連接。 您想要做的一件事是重用現有連接。 現在,我沒有看過所有的實現,但我看到的兩個可能不符合這個要求。 最糟糕的情況是,也許你可以得到一些想法。 最好的情況是,如果那里可能有另一個實現在你需要的地方,你現在有一個起點找到它。

使用RPC作為抽象並不排除使用UDP作為傳輸層:RMI是一種RPC抽象,通常在底層使用TCP(我上次看過)。

我建議只編寫一個Java層來討論你的UDP協議:你可以使用許多庫中的任何一個來完成它而你不必丟棄你現有的所有工作。 如果要在協議周圍包裝RPC層,沒有理由不這樣做:創建一個login方法,該方法發送登錄UDP數據包並接收相應的響應並返回它。

如果這是一個遠程嚴肅的項目,你應該看看Netty

它是開發網絡系統的絕佳庫,具有大量經過驗證的生產用途,非常適合TCP或UDP客戶端 - 服務器通信等。 我不會去重新發明這個輪子,除非你真的必須:-)

作為獎勵,他們也有一些很好的例子和文檔。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM