- 背景:java网络编程框架底层的多路复用的 面向对象设计
- NioEventLoopGroup:上层是bootstrap起动器,下层是selector。 从学习过程中的案例可以看出,EventLoopGroup里有多个线程, 这些线程从管理连接通道(channel),处理channel上的读写事件,此时就出现了selector和selectionKey
- selector:干活的,从注册的socket+事件中,我的理解:当有socket事件发生时,这个事件会被写入到socket事件缓冲区,selector会循环自己管理的socket事件列表,看哪个socket事件缓冲去有数据,则把数据去出来处理。selector的select方法返回事件个数,如果大于0, 则把事件都放到selector的集合selectedKeys
- selectionKey:封装数据用的,包含socket+事件+channel+读写事件的缓冲区(selectionKey.attachment(),类型是ByteBuffer), 当事件类型是读或写时,才会有channel,事件类型是连接Accept时,selectionKey里没有channel,此时的channel要从serverSocketChannel.accept()获得。
- 处理完的selectionKey,要从集合中删除。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。