我的问题是如何从选择器中删除在给定时间内没有响应的主机。
假设我在选择器中注册了 1 个通道以供OP_CONNECT使用。通道处于非阻塞模式。我添加的主机我知道它没有响应,所以我的程序无法连接,选择器的 select() 方法将始终返回 0。现在,我如何使用选择(超时)并删除未响应的主机?
主机的 ping 输出:
25 packets transmitted, 0 received, 100% packet loss, time 24000ms
只需关闭相关频道即可。这将自动取消其所有SelectionKeys
,并将其从有关Selector(s)
的职权范围中删除。
但是,我个人看不到NIO或非阻塞模式对客户的意义。