Java单线程多用户聊天程序

标签 java multithreading sockets networking

因此,我正在从事这个娱乐项目,以了解有关 java 网络的更多信息,到目前为止,我遇到的每个教程或文档都涉及为每个客户端连接创建一个新线程以等待输入。我想知道是否可以用单个线程处理客户端连接列表?我尝试执行类似以下代码的操作,但没有成功。

while(true){
     for(Client c : list){
          DataInputStream dis = new DataInputStream(c.getSocket().getInputStream());
          if(dis.readLine()!=null){
               //Code
          }
          dis.close();
     }
}

最佳答案

是的,使用 NIO 包的单线程是可能的。这将允许您在单线程内设置非阻塞 IO 和跨 channel 多路复用。这并不完全是微不足道的,但有一个很好的例子 here .

上面的示例将阻塞 readLine() 调用,直到 Socket 上有数据可用。如果您的一个客户端正在等待数据,则 while 循环将永远不会继续,您将永远不会为其他客户端提供服务。

关于Java单线程多用户聊天程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26151174/

相关文章:

java - 在Java中,套接字请求网页总是超时

用于将字符串转换为日期的 Java 库

java - 用于同步的 CyclicBarrier 与 CountDownLatch

node.js - 启动后分离一个 spawn 子进程

java - 多线程会提高性能吗?场景java

java - java中通过socket的Unicode文本

java - 在Mac上为lucene设置java类路径

正在创建 Java GUI,但事件未触发任何内容

java - 如何使用 onclick()、使用按钮更改 TextView 的文本颜色?

c - 一次可以使用套接字发送和接收的最大数据大小?(TCP 套接字)