我在两台不同的机器上有两个客户端,我不知道他们什么时候会发送请求。
这是我必须使用Selector
和ServerSocketChannel
的场景吗?
示例:
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/