我正在尋找一種非常簡單的方法來允許Java和C++應用程序之間的RPC。在Java和C++中簡化RPC
我的系統包含幾個Java模塊和一個C++模塊。 我沒有太多不同的程序可以調用(每個模塊大約2-3個),並且它們不會有太大變化(除了一些小的修改,例如添加新程序或更改原型)。我正在寫所有的模塊,所以我可以使用任何我想要的。此外,這些模塊都將在同一臺機器上執行,除了一臺機器,但是在另一臺機器上執行其中一些機器而不會受到多少騷擾(基本上只是更改配置文件)的可能性會更好。
這個應用程序使用的所有模塊,機器和網絡都是可信的,但我不希望RPC協議出現任何安全漏洞,並且我想要最小的性能開銷,所以RPC協議越簡單越好。另外,每個調用的方法只有一個原型。
目前我試圖通過TCP套接字使用RPC,因爲我不想使用RMI或Unix原語(在Java上沒有標準實現,也沒有網絡功能)。我已經編寫了一個非常簡單的RPC協議:通過TCP框架,您可以調用所調用方法的序列化名稱,然後是序列化的參數列表。在服務器端,它偵聽一個對象並使用反射來執行給定的方法。在發生錯誤的情況下,返回的對象是封裝錯誤的DistantRPCError。代碼非常簡單(只有大約100個loc),並且可以用於各種各樣的情況(我使用Streams,所以我甚至不依賴於套接字)。 我面臨的問題是我無法靜態測試我的代碼(本地測試的簡單初始化比測試代碼更長),我真的不明白在C++中實現它有多困難(使用JNI for序列化,我想)。
所以我的問題是:你知道在Java和C++中進行RPC調用的另一種方法,它非常簡單(因此沒有RMI)並且可以信任(我不想尋找一種令人眩目的技術,我想要一些標準和行業認證的東西)。另外,我對性能有一些限制(機器是一臺低成本的計算機,我在本地有很多密碼學)。正如我所說的,大多數模塊(除了一個或兩個)都是在本地執行的,所以我也對IPC機制感興趣(即使對於我的所有模塊只有一個RPC機制是很好的)。
如果你願意,我可以給你我的實際RPC代碼,但正如我所說的那樣,它甚至沒有經過測試,所以我不確定它的工作原理。
編輯:我可能會使用SOAP,因爲我沒有看到太多的興趣使用ORB來解決我的特定問題。感謝您的想法!
CORBA似乎是我的最佳選擇。 – vickirk 2011-03-14 10:20:21
我不知道,使用基於組件的方法似乎有點矯枉過正,我不知道本地HTTP服務器如何在性能方面工作(我最多可以有8個模塊在本地一起工作,並像50個RPC一樣工作每秒);但是謝謝你,我會研究這些方法! – 2011-03-14 10:23:09
我不明白如何使用自定義協議對套接字進行RPC不是基於組件的。 「組件」和「模塊」這兩個詞似乎可以互換。如果性能是一個問題,你會擔心你所引入的所有網絡延遲問題。 – duffymo 2011-03-14 10:39:27