registerSelection 注册问题
来源:6-8 对于聊天室功能实现若是使用UDP来是否会更好?
慕粉1710545776
2021-07-10

老师这个key!=null 说明 已经注册了, key.interestOps(key.readyOps() | registerOps); 这个不明白是什么意思
已经注册了,不去管他不就行了
写回答
1回答
-
这里的意思是这样:
一个channel可以在一个selector上进行多次不同的注册,其行为包括:读监听、写监听... 等
而且其多次注册其实等效于在更改同一个值;这个值是一个int值,其使用不同的位来标记不同的注册状态。
我们设想这样一个场景:
channel已经注册了:读监听
现在需要注册写监听:如果直接去注册一个写监听,则会把之前的监听状态给覆盖了,也就等效于只剩下:写监听了
要解决,则需要判断之前是否有注册过,如果有,那么我们使用位操作,将当前需要注册的状态合并进去:写监听 | 读监听
这样就实现了增加操作,而不是一次覆盖操作。
00
相似问题