Netty 中的各种类, 各种抽象, 实际上很多是包装了 Java NIO 的类SelectableChannel
, Selector
, SelectionKey
所以学习Netty, 一定要先学TCP连接, 再学Java的抽象, 再学Netty是如何对应Java的抽象
EventLoop是什么
- 就是一个包装了线程的类, 任务就是不断的处理新的事件
ChannelEvent
EventLoop
维护着一个注册了ServerSocketChannel
的Selector
实例
EventLoopGroup是什么
Netty经典使用模式
- 使用两个
EventLoopGroup
, 一个叫bossGroup
, 一个叫workerGroup
bossGroup
一般指定一个线程, 专门处理TCP连接的OP_ACCEPT
事件, 当建立连接之后, 会生成一个SocketChannel对象, 交给workerGroup处理workerGroup
一般指定多个线程, 专门处理TCP连接的 读写事件, 使用bossGroup
创建的SocketChannel
来进行读写- 当发生TCP事件之后, 会将事件放入
EventLoop
的taskQueue
中