registerSelection 注册问题

来源:6-8 对于聊天室功能实现若是使用UDP来是否会更好?

慕粉1710545776

2021-07-10

图片描述
老师这个key!=null 说明 已经注册了, key.interestOps(key.readyOps() | registerOps); 这个不明白是什么意思
已经注册了,不去管他不就行了

写回答

1回答

Qiujuer

2021-07-16

这里的意思是这样:

一个channel可以在一个selector上进行多次不同的注册,其行为包括:读监听、写监听... 等

而且其多次注册其实等效于在更改同一个值;这个值是一个int值,其使用不同的位来标记不同的注册状态。

我们设想这样一个场景:

  1. channel已经注册了:读监听

  2. 现在需要注册写监听:如果直接去注册一个写监听,则会把之前的监听状态给覆盖了,也就等效于只剩下:写监听了

  3. 要解决,则需要判断之前是否有注册过,如果有,那么我们使用位操作,将当前需要注册的状态合并进去:写监听 | 读监听

这样就实现了增加操作,而不是一次覆盖操作。

0
0

Socket网络编程进阶与实战 系统掌握Socket核心技术

理论+实践,系统且深入掌握Socket核心技术,从容应对各种Socket应用场景的不二之选

2324 学习 · 476 问题

查看课程