在应用程序中,
ServerSocket
实例正在接受一个连接
并将其传递给一个线程。该端口的连接
都是带线程的——一个连接一个线程。套接字监听器看起来像这样:
serverSocket = new ServerSocket(port);
for (;;) { // keep listening
Socket socket = serverSocket.accept();
Thread t = new LRcvr(socket);
t.start();
}
我想知道的是,是否还有更多工作要做 在该套接字的高流量条件下加快速度。
我特别关心ServerSocket.accept()
.
在多个连接请求中,比如req-1
& req-2
,
req-1
在req-2
之前到达端口。但是,socket & req-1
之间的连接
由于自身的某种原因没有及时建立,这会阻止
req-2
被“听到”它的请求并因此在端口连接。
这整件事是因为 ServerSocket.accept()
方法是一个阻塞方法。
必须有一个聪明的方法来解决这个问题。这是什么?
创建多个套接字监听器来监听和接受连接请求 浮现在脑海中,但这行得通吗-如何?我应该多线程套接字监听器吗? 那我应该担心什么?
注意:我们只能操作一个端口——这里不能选择多个套接字。
TIA
最佳答案
在您的示例中,req-1 不会阻止 req-2 被听到。
ServerSocket.accept()
仅阻止新连接的应用程序级处理,并在建立连接时触发。
如果与 req-1 的连接尚未建立,则它尚未暴露给应用程序级别。 accept()
将在 req-2 连接时愉快地解锁。
(尽管为每个连接生成一个新线程可能是个问题。如果您接受 10000 个连接怎么办?我不确定现代 JVM 和/或内核能否有效地处理这么多线程。)
关于java - ServerSocket.accept() 是一种阻塞方法——多个监听器来加速?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24564486/