Java 如果两个客户端同时向使用while循环接受请求的ServerSocket发送请求,会发生什么情况
我有两个客户在两台不同的机器上,我不知道他们什么时候会发送请求 这是我必须使用Java 如果两个客户端同时向使用while循环接受请求的ServerSocket发送请求,会发生什么情况,java,Java,我有两个客户在两台不同的机器上,我不知道他们什么时候会发送请求 这是我必须使用选择器和服务器socketchannel的场景吗 例如: public class Server{ public static void main(String[] args) { try( ServerSocket serverSocket = new ServerSocket(1234) ){ while(tr
选择器
和服务器socketchannel
的场景吗
例如:
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){}
}
}
这是我必须使用选择器和服务器socketchannel的场景吗
没有。一个更常见的解决方案是每个客户端有一个线程——当您接受一个调用时,创建一个新线程(或使用线程池中的现有线程)并使用它来处理该连接。原始线程再次调用accept
(立即-无需睡眠),并为下一个连接生成新线程,等等
(异步IO当然有很多优点,但您不会被迫使用它。)
这是我必须使用选择器和服务器socketchannel的场景吗
没有。一个更常见的解决方案是每个客户端有一个线程——当您接受一个调用时,创建一个新线程(或使用线程池中的现有线程)并使用它来处理该连接。原始线程再次调用accept
(立即-无需睡眠),并为下一个连接生成新线程,等等
(异步IO当然有一些优点,但您不必被迫使用它。)您不必使用
选择器/服务器socketchannel
。
相反,对于一个非常简单的服务器,您可以简单地启动一个新线程来处理客户端连接。有关如何使用每个客户端的新线程执行此操作的示例,请参阅。您不必使用Selector
/ServerSocketChannel
。
相反,对于一个非常简单的服务器,您可以简单地启动一个新线程来处理客户端连接。有关如何使用每个客户端的新线程执行此操作的示例,请参阅。为什么要睡在那里?如果没有睡眠,它将正常工作,即您将获得2个连接。有了睡眠,第二个将不得不毫无理由地等待5秒钟。我建议你阅读基本的套接字教程,你似乎需要它。你为什么要睡在那里?如果没有睡眠,它将正常工作,即您将获得2个连接。有了睡眠,第二个将不得不毫无理由地等待5秒钟。我建议您阅读基本套接字教程,您似乎需要它。