2013-10-22 142 views
2

我正在使用TCP/IP在java中開發多客戶機/服務器應用程序。我的服務器爲每個clientSocket創建一個新線程(clientSocket = serverSocket.accept();)。問題似乎是爲所有正在運行的線程瞭解彼此的方式(即用於向聊天室中的所有在線用戶廣播消息)的方式。當我的每個線程知道新用戶何時連接到服務器以及用戶何時斷開與服務器的連接時,什麼是有效的方式?具有多線程服務器(TCP/IP)的客戶機/服務器聊天室

+0

您startig爲每個連接分配一個線程,然後想efficent?您希望在高峯時間使用您的應用程序有多少useres? –

+0

這真的是一門大學課程,所以我會說最多10-15。順便說一下,爲每個連接啓動一個新線程會有什麼效率? – user2000920

+0

我的帖子對你有幫助嗎? :) –

回答

0

我在你的位置會創建一個額外的隊列線程,它具有對套接字線程和消息隊列的引用。 所有的套接字線程都可以將消息排入隊列線程,然後將消息發送到所有套接字線程(因此套接字線程需要對您的隊列線程/隊列進行引用 - 同步!)。因爲你不得不期待ArryList?的套接字線程可以改變你必須使用迭代器迭代。

要回答你的問題的意見:性能

開始每個連接一個線程是相當激烈的資源(想象10.000連接)。所以還有其他的方法來處理它。

我會確定與米娜去:

的Apache MINA是一個網絡應用程序框架,它可以幫助用戶方便地開發高性能和高可擴展性的網絡應用程序。它通過Java NIO提供了各種傳輸(如TCP/IP和UDP/IP)上的抽象事件驅動的異步API。

網上有很多關於MINA的教程。

也許它有點矯枉過正,但如果你有興趣,這是值得的。

[編輯]

如果它應該是它只是10-15客戶蠻好用的每個連接一個線程...