java - 如果两个客户端同时向使用 while 循环接受请求的 ServerSocket 发送请求,会发生什么情况

标签 java

我在两台不同的机器上有两个客户端,我不知道他们什么时候会发送请求。

这是我必须使用SelectorServerSocketChannel的场景吗?

示例:

public class Server{

    public static void main(String[] args) {

        try(
            ServerSocket serverSocket = new ServerSocket(1234)
           ){

               while(true) {
                    serverSocket.accept();
                    Thread.sleep(5*1000);
                    //and while its sleeping, second client sends request
               }
           }catch(Exception e){}
    }
}

最佳答案

is this the scenario where I HAVE TO use Selector and ServerSocketChannel?

不。一种更常见的解决方案是每个客户端有一个线程 - 当您接受调用时,创建一个新线程(或使用线程池中的现有线程)并使用它来处理该连接。原始线程再次调用 accept (立即 - 无需 sleep )并为下一个连接生成一个新线程,等等。

(异步 IO 当然有优点,但您并不是被迫使用它。)

关于java - 如果两个客户端同时向使用 while 循环接受请求的 ServerSocket 发送请求,会发生什么情况,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35392729/

相关文章:

java - 尝试将私钥和公钥转换为字符串格式

java - 尝试使用 github 操作 (maven) 部署到 github 包时出现错误代码 400

java - 如何设置 JMenuItem 的垂直分隔符

java - 带有特殊字符的xml,编码utf-8

java - MyBatis 批量插入/更新 Oracle

java - MongoDB 的 JMX 注册错误

java - 如何在 setOnAction 外部使用定义在其内部的变量?

java - 在 Mac OS X 上的 Java Swing JComponent 中呈现梵文连字 (Unicode)

java - 如何更改不同类的主方法中的值

java - 不关闭游标或数据库对象?