我仍在学习NIO,并提出了一个简单的Ping / Pong应用程序。 我的客户是用NIO编写的。 服务器是Memcached的telnet端点。 客户端不断发布stats\\r\\n ,服务器以一些统计信息作为响应。
此设置通过SocketChannel和Selector.select()以非阻塞方式工作
我没有完全理解的部分是错误情况,其中客户端和服务器之间的连接处于不稳定状态,或者服务器在没有关闭连接的情况下消失了(在测试期间,我使用iptables DROP规则对此进行了模拟):
在成功执行select()操作后,我在read操作上最终获得了以下堆栈跟踪(在OSX和Linux上select() :
java.io.IOException: Operation timed out
at sun.nio.ch.FileDispatcherImpl.read0(Native Method) ~[na:1.8.0_73]
at sun.nio.ch.SocketDispatcher.read(SocketDispatcher.java:39) ~[na:1.8.0_73]
at sun.nio.ch.IOUtil.readIntoNativeBuffer(IOUtil.java:223) ~[na:1.8.0_73]
at sun.nio.ch.IOUtil.read(IOUtil.java:192) ~[na:1.8.0_73]
at sun.nio.ch.SocketChannelImpl.read(SocketChannelImpl.java:380) ~[na:1.8.0_73]
使用的代码如下所示:
Selector selector = Selector.open();
SocketChannel memcachedClient = S