【发布时间】:2012-11-22 15:58:48
【问题描述】:
大家都知道java IO是blocking,java NIO是non-blocking。在 IO 中,您必须使用每个客户端的线程模式,在 NIO 中,您可以为所有客户端使用一个线程。
现在我的问题是:是否可以使用仅 Java IO api 进行非阻塞 设计。 (不是蔚来)
我正在考虑这样的模式(显然非常简化);
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
}
另请注意,客户端将始终准备好读取数据。
您对此有何看法?这是否适用于至少应容纳数百个客户端而不会出现重大性能问题的服务器?
【问题讨论】:
-
您认为这会以何种方式实现非阻塞?
-
您似乎有正确的想法,即您使用
available方法模拟非阻塞 I/O 并轮询客户端。但是 EJP 的答案是正确的 -
@JordanKaye 我认为这是非阻塞的,因为我只读取了准备好的字节数