Server端会接收客户端发起的连接操作,然后启动worker线程组。
Server和Client端的交互
上文(https://blog.csdn.net/xxcupid/article/details/104797073)提到了,NioEventLoop中有两个重要的操作,分别是NioEventLoop.processSelectedKeys和SingleThreadEventExecutor.runAllTasks。说完了runAllTasks,下面说下processSelectedKeys。
1.调用链
当client端发起连接的时候:
Boss线程部分:
run:408, NioEventLoop
select:753, NioEventLoop
select:62, SelectedSelectionKeySetSelector
select:97, SelectorImpl
lockAndDoSelect:86, SelectorImpl
doSelect:122, KQueueSelectorImpl->这个具体实现看平台,我用过mac来调试的,所以这里是KQueue的实现。
updateSelectedKeys:169, KQueueSelectorImpl
add:35, SelectedSelectionKeySet->使得selectedKeys中的元素个数大于0,这里的SelectionKey的readyOps和interestOps是16,是OP_ACCEPT
同时,在NioEventLoop的死循环中有对应判断,
run:458, NioEven