2014-09-26 37 views
0

所以問題是我有15個客戶端需要能夠互相溝通。我的問題是如何做到這一點?顯然,一種方法是簡單地將客戶端也作爲服務器,但這意味着完全連接十五個客戶端所需的120個唯一連接。我寧願不這樣做,因爲它似乎凌亂。Java套接字 - 許多客戶端之間的消息

當前解決方案: 每個新連接都有服務器分離一個單獨的線程來偵聽它。每個客戶端都有一個單獨的線程監視傳入信息的頻道。

服務器充當消息路由器:流程1需要向流程2發送消息,並向服務器發送指示預期收件人,發件人和消息的消息。

收到消息後,服務器將消息傳遞給進程2.偵聽線程檢測到它並將其傳遞給進程。

對於客戶端之間的每條消息都是如此。

這看起來很笨重。有沒有更好的方法/包來使用它?

+0

您可以查看隨Java 7引入的java.nio包。它提供了非阻塞套接字通道,以更好地處理您的類型。 http://docs.oracle.com/javase/7/docs/api/java/nio/channels/SocketChannel.html – Alexandre 2014-09-26 20:31:47

+0

看看UDP/[DatagramSocket](http://download.java.net/jdk7/存檔/ B123 /文檔/ API/JAVA/NET/DatagramSocket.html)。沒有確認,數據到達,就像使用TCP/Socket一樣,但它允許所有的服務器發送recive的東西給任何他們想要的東西。 – 2014-09-26 20:32:06

+0

您可能想要探索點對點方法! – 2014-09-26 20:32:30

回答

0

一個UDP多播系統會爲此工作,但對你自己來說會變得很複雜(因爲你必須自己擔心同步和錯誤檢測/修正以及節點掉入和退出組)。

有各種中間件解決方案,包括分佈式緩存已經很好地解決了這個問題。看看Infinispan。如果這個級別太高,而您只想要一個較低級別的解決方案,請嘗試使用JGroups。我只列出這些,因爲我知道它們很快且很實用,但還有很多其他的東西。

+0

Infinispan有點太高級了,比我真正需要的還要強大。 JGroups似乎是最好的。謝謝你,非常可靠的答案。 – 2014-09-26 22:11:10

相關問題