[英]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.