gpt4 book ai didi

java - 带有 java.io 的非阻塞服务器

转载 作者:行者123 更新时间:2023-11-30 06:27:03 28 4
gpt4 key购买 nike

大家都知道java IO是阻塞,而java NIO是非阻塞。在 IO 中,您必须为每个客户端模式使用一个线程,在 NIO 中,您可以为所有客户端使用一个线程。

现在我的问题是:是否可以使用 Java IO api 来进行非阻塞设计。 (不是 NIO)

我在想这样的模式(显然非常简化);

        List<Socket> li;
for (Socket s : li) {
InputStream in = s.getInputStream();
byte[] data = in.available();
in.read(data);
// processData(data); (decoding packets, encoding outgoing packets
}

另请注意,客户端将始终准备好读取数据。

您对此有何看法?这是否适用于至少应容纳数百个客户端而不会出现重大性能问题的服务器?

最佳答案

这是可能的,但毫无意义。 java.net 中没有 select(),所以你只能轮询套接字,这意味着在轮询之间 hibernate ,而且你不知道 hibernate 多长时间,所以你会睡得比必要的时间更长,所以你会浪费时间,增加延迟等;否则你必须以非常短的时间间隔 sleep ,从而消耗毫无意义的 CPU。

对于仅仅几百个客户来说,不可能反对每个连接使用一个线程的传统做法。

我不知道“客户端将始终准备好读取数据”是什么意思。您无法从服务器得知这一点,如果它没有准备好,写入它可能会阻塞,这将彻底打乱您的 applecard。

关于java - 带有 java.io 的非阻塞服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13712847/

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