2009-11-12 113 views
2

我發現有一個名爲GCT - Group Communication Toolkit的.Net工具包,它是JGroup的C#版本。我想知道這個和JGroup是否可以連接在一起使java和C#客戶端相互通信。 如果不是,那麼製作java程序和C#程序的最佳選擇是什麼? 我遇到的另一個選項是XMPP實現。 我需要在同一臺計算機上運行的這兩個程序之間進行非常快速的消息傳遞。主要的要求是,當某些特定事件被觸發時,這個程序中的任何一個都會向另一個發送消息。 任何想法都歡迎。Java和C#之間的通信#

+0

檢查http://stackoverflow.com/questions/16689/java-and-c-interoperability 顯然你必須看看數據庫,webservices或簡單的XMl文件可能FileSystemWatcher? – PRR 2009-11-12 06:32:28

回答

4

XMPP不是你想要的。它專爲在具有中央服務器的計算機之間傳遞消息而設計。

我建議使用套接字在應用程序之間傳遞數據。請參閱C#中的System.Net.Sockets.Socket類和Java中的java.net.Socket類。

3

我在哪裏工作我們使用ICE(http://www.zeroc.com/)。它讓我們可以封送java和C#之間的二進制數據。不算太差。

+0

我喜歡ICE。我們在工作中使用它,突然很容易使用不同的語言。這幾乎就像你可以在點網中混合語言。 – 2009-11-12 15:10:05

0

如果性能很重要,請參閱科學計算中使用的內容。科學家們在企業中遇到了同樣的問題,需要在更廣泛的語言和平臺上連接客戶端和服務器以及所有這些問題。也許這種稱爲Babel的組件綁定工具在超出其原始域的情況下會有用嗎?接口由SIDL描述(像CORBA中的IDL),但我不知道C#是否被覆蓋。 https://computation.llnl.gov/casc/components/babel.html

0

我可能沒有明確要求。我正在尋找服務器推送技術,而不是客戶端拉。所以我不確定上述解決方案是否可行。我的C#代碼正在監視一個環境並處理在該環境中生成的某些事件。當一個事件產生時,我會記錄一些信息。這些信息我想發送到我的java代碼。正如你所看到的,C#代碼應該充當一個服務器,將數據推送到一個Java客戶端,每當發生某些特定事件時。 此外,只有一臺服務器和一臺客戶機,運行在同一臺機器內部,因此不存在可擴展性問題。 只關心性能,因爲事件是以0.01秒的速度生成的。 所以這就是爲什麼我想到XMPP。

+0

我必須補充一點,每封郵件的大小非常小。這只是簡單的字符串 – sura 2009-11-14 02:12:07

1

爲了響應OP的「答案」 ......

映射「服務器推送」到經典的RPC模型的方式(例如,由CORBA實現,SOAP,ICE,RMI,等等)是轉換角色,以便您認爲您的服務器充滿了RPC中的客戶端角色。該模式是這樣的:

  1. 你的客戶端向服務器的呼叫,通過手柄回調對象。

  2. 服務器記得回調對象並返回。

  3. 客戶端進入睡眠狀態(或做別的東西......)

後來,服務器想推一些數據。

  1. 服務器調用回調對象上的「推」 RPC,傳遞的數據。

  2. 客戶端在回調對象上接收到呼叫/請求,對數據進行一些操作並進行回覆。

1

如果我這樣做,並需要低延遲,我可能會考慮內存映射文件或管道。其中任何一個都需要一些JNI和p/invoke編程。

1

Google的協議緩衝區可能是一個選項。它非常便攜,速度相當快。