https://zhuanlan.zhihu.com/p/181239748

image.png

Netty 中的各种类, 各种抽象, 实际上很多是包装了 Java NIO 的类
SelectableChannel , Selector, SelectionKey
所以学习Netty, 一定要先学TCP连接, 再学Java的抽象, 再学Netty是如何对应Java的抽象

EventLoop是什么

  • 就是一个包装了线程的类, 任务就是不断的处理新的事件 ChannelEvent
  • EventLoop 维护着一个注册了 ServerSocketChannelSelector 实例

EventLoopGroup是什么

Netty经典使用模式

  • 使用两个EventLoopGroup , 一个叫 bossGroup , 一个叫 workerGroup
  • bossGroup一般指定一个线程, 专门处理TCP连接的 OP_ACCEPT 事件, 当建立连接之后, 会生成一个SocketChannel对象, 交给workerGroup处理
  • workerGroup 一般指定多个线程, 专门处理TCP连接的 读写事件, 使用bossGroup创建的SocketChannel来进行读写
  • 当发生TCP事件之后, 会将事件放入 EventLooptaskQueue