2

我正在使用 TCP/IP 在 java 中开发一个多客户端/服务器应用程序。我的服务器为每个 clientSockets 创建一个新线程 (clientSocket = serverSocket.accept();)。问题似乎在于找出一种让所有正在运行的线程相互了解的方法(即,向聊天中的所有在线用户广播消息)。对于我的每个线程来说,了解新用户何时连接到服务器以及用户何时与服务器断开连接的有效方法是什么?

4

1 回答 1

0

我在你的位置会创建一个额外的队列线程,它引用了套接字线程和一个消息队列。您的所有套接字线程都可以将消息排入队列线程,然后将消息发送到所有套接字线程(因此套接字线程需要对您的队列线程/队列的引用 - 同步!)。

正如您所期望的那样,ArryList?套接字线程的数量可以改变您必须使用迭代器进行迭代。

要在评论中回答您的问题:性能

每个连接启动一个线程是非常耗费资源的(想象一下 10.000 个连接)。所以还有其他的方法来处理它。

我肯定会选择 mina:

Apache MINA 是一个网络应用框架,帮助用户轻松开发高性能和高扩展性的网络应用。它通过 Java NIO 在 TCP/IP 和 UDP/IP 等各种传输上提供抽象的事件驱动异步 API。

网上有很多关于 MINA 的教程。

也许它有点矫枉过正,但如果你有兴趣,这是值得的。

[编辑]

如果它只有 10-15 个客户端,那么每个连接使用一个线程应该没问题……

于 2013-10-22T16:36:16.033 回答