繁体   English   中英

使用java.io的非阻塞服务器

[英]A non-blocking server with java.io

每个人都知道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(),因此您可以简化为轮询套接字,这意味着在两次轮询之间睡眠,并且您无法告知睡眠时间,因此您的睡眠时间将超过必要的时间,因此您将浪费时间,增加等待时间等; 否则,您必须短暂地睡眠,以免浪费CPU资源。

对于仅几百个客户端,没有可能反对每个连接使用常规线程。

我不知道“客户端将永远准备好读取数据”是什么意思。 您无法从服务器上得知,如果尚未准备就绪,则对其的写入可能会阻塞,这将使您的applecard完全不高兴。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM