gpt4 book ai didi

java - ServerSocket.accept() 是一种阻塞方法——多个监听器来加速?

转载 作者:行者123 更新时间:2023-11-30 07:07:49 29 4
gpt4 key购买 nike

在应用程序中,ServerSocket 实例正在接受一个连接并将其传递给一个线程。该端口的连接都是带线程的——一个连接一个线程。套接字监听器看起来像这样:

serverSocket = new ServerSocket(port);
for (;;) { // keep listening
Socket socket = serverSocket.accept();
Thread t = new LRcvr(socket);
t.start();
}

我想知道的是,是否还有更多工作要做在该套接字的高流量条件下加快速度。

我特别关心ServerSocket.accept() .在多个连接请求中,比如req-1 & req-2req-1req-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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com