🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
## Netty工作原理 ### Reactor模型结构 Netty是典型的Reactor模型结构,在实现上,Netty中的`Boss类`充当`mainReactor`,`NioWorker类`充当`subReactor`(默认NioWorker的个数是当前服务器的可用核数)。     在处理新来的请求时,NioWorker读完已收到的数据到ChannelBuffer中,之后触发ChannelPipeline中的ChannelHandler流。     Netty是事件驱动的,可以通过ChannelHandler链来控制执行流向。因为ChannelHandler链的执行过程是在subReactor中同步的,所以如果业务处理handler耗时长,将严重影响可支持的并发数。 ### Netty工作原理图 ![](https://img.kancloud.cn/18/6f/186f4cfa667f4c18f085a392bfe62b7e_714x599.png) - Server 端包含 1 个 Boss NioEventLoopGroup 和 1 个 Worker NioEventLoopGroup。 - NioEventLoopGroup 相当于 1 个事件循环组,这个组里包含多个事件循环 NioEventLoop,每个 NioEventLoop 包含 1 个 Selector 和 1 个事件循环线程。 ### Boss NioEventLoop循环任务 1. 轮询 Accept 事件。 2. 处理 Accept I/O 事件,与 Client 建立连接,生成 NioSocketChannel,并将 NioSocketChannel 注册到某个 Worker NioEventLoop 的 Selector 上。 3. 处理任务队列中的任务,runAllTasks。任务队列中的任务包括用户调用`eventloop.execute()` 或 `schedule()` 执行的任务,或者其他线程提交到该 eventloop 的任务。 ### Worker NioEventLoop的功能 1. 轮询 Read、Write 事件。 2. 处理 I/O 事件,即 Read、Write 事件,在NioSocketChannel 可读、可写事件发生时进行处理。 3. 处理任务队列中的任务,`runAllTasks`。