2013-10-22 108 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客户蛮好用的每个连接一个线程...