前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Netty从0到1的运作流程

Netty从0到1的运作流程

作者头像
书唐瑞
发布2022-06-02 13:48:39
2390
发布2022-06-02 13:48:39
举报
文章被收录于专栏:Netty历险记

首先一张概览图

通过这张图, 我们从无到有, 从0到1讲解下Netty启动运作过程的流程.

一开始创建两个NioEventLoopGroup, 一个负责接收客户端请求, 另一个负责处理客户端的IO操作. 每个NioEventLoopGroup中都有若干个NioEventLoop.

NioEventLoop的创建过程会创建ThreadPerTaskExecutor, MpscQueue, Selector这三个主要的成员属性(ThreadPerTaskExecutor是在NioEventLoopGroup中被创建, 只是作为NioEventLoop的成员属性而已). ThreadPerTaskExecutor负责创建底层的线程, MpscQueue用于'装载'任务, 实现异步串行无锁化, Selector负责实现多路复用.

然后流程就走到了NioServerSocketChannel.

创建操作会创建id, Unsafe, Pipeline三个主要成员属性. id作为唯一标识, Unsafe负责底层读取ACCEPT请求, Pipeline负责业务流程, 其中Pipeline类似一个管道, 里面包含很多Handler, 一个主要的Handler就是ServerBootstrapAcceptor.

初始化操作主要是向Channel设置选项和属性 以及向Pipeline中添加ChannelInitializer.通过选择器EventExecutorChooser#next得到NioEventLoop并与其关联.

注册操作会以任务的形式添加到NioEventLoop的MpscQueue中. 同时也就触发了NioEventLoop的启动流程.

绑定操作也是以任务的形式添加到NioEventLoop的MpscQueue中.

NioEventLoop的启动即通过ThreadPerTaskExecutor创建一个线程.

启动完成之后就进入无限循环执行过程.

会将之前放入MpscQueue中的注册任务和绑定任务进行处理. 注册就是向Selector注册JDK-Channel, 调用handlerAdded方法, 向Pipeline中添加ServerBootstrapAcceptor, 触发channelRegistered事件. 绑定端口, 触发channelActive事件, 向Selector设置ACCEPT事件.

至此服务端就可以接收客户端的连接请求了.

关于如何接收客户端的连接, 明天再续.

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2019-11-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Netty历险记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档