NIO相关问题
来源:10-9 NIO服务器

红邮筒
2018-12-13
1、老师,按照你前面讲的原理,我觉得selector一次只选择0个或1个key,那么为什么selectedKeys方法的结果用set数组表示?仅仅是为了方便用iterator吗?
2、key等于OP_ACCEPT时register函数注册的selector和key等于OP_READ时register函数注册的selector是否是同一个?
3、而且从代码来看,if(key.isAcceptable())和if (key.isReadable())代码块里的channel还不是一个channel,有点不懂
写回答
1回答
-
第一个问题,你的理解是对的,但不是为了方便。这个设计的确比较怪,是为了和几十年历史的unix select函数的行为保持一些一致。
对于2和3。这是同一个selector,但是挂了很多channel。一个用来accept新的链接,然后每个链接又有对应的op_read的channel注册在selector里面。
主循环阻塞住,然后有新的链接,或者有新的数据,都会造成对应的key被select,然后进行对应的操作。232018-12-17
相似问题