是否可以取消注册,然后使用相同的选择器再次注册? 我必须限制我接受的连接量并执行 key.cancel() 来停止接收 OP_ACCEPT 事件。
server.register(selector, SelectionKey.OP_ACCEPT);
...
key.cancel()
...
如果连接关闭,我无法再次运行register(..),得到一个 java.nio.channels.CancelledKeyException
register(..) 的 Javadoc :如果此 channel 当前已向给定选择器注册,但相应的键已被取消,则抛出 CancelledKeyException
实现我想要做的事情的方法是什么?
最佳答案
只需清除 key 的 interestOps
中您想要清除的位即可:例如 key.interestOps(0)
。
关于java - java NIO中取消注册并重新注册,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17977016/