1 Star 0 Fork 0

languid/images

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
文件
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
netty流程(三).txt 2.59 KB
一键复制 编辑 原始数据 按行查看 历史
languid 提交于 2019-08-09 19:50 . loading...
NioEventLoopGroup 初始化 ---> MultithreadEventExecutorGroup ---> children = new EventExecutor[] ---> 实现类NioEventLoop
ServerBootstrap.bind() ---> AbstractBootstrap.bind()
---> AbstractBootstrap.doBind()
---> AbstractBootstrap.initAndRegister() 此方法返回一个回调对象,该方法会利用反射进行构造器创建NioServerSocketChannel.java对象
---> ServerBootstrap.init() 此方法会把childGroup交给ServerBootstrap类的内部类ServerBootstrapAcceptor进行处理读写事件,
ServerBootstrapAcceptor类不要想得太过于复杂,这个类就是Server端的handler,重写了channelRead()方法用于把读写事件交给childGroup
---> AbstractBootstrap.doBind0() 如果initAndRegister注册成功则回调此方法
---> bossGroup.eventLoop().execute() 把bind方法构造成一个task交给bossGroup执行器进行执行
这里的eventLoop就是上面的NioEventLoop
NioEventLoop.execute() ---> SingleThreadEventExecutor.execute()
---> SingleThreadEventExecutor.startThread()
---> SingleThreadEventExecutor.doStartThread()
---> NioEventLoop.run()
---> NioEventLoop.processSelectedKey(SelectionKey,AbstractNioChannel)
---> AbstractNioMessageChannel.NioMessageUnsafe.read() 会构建NioSocketChannel的对象,然后用此对象进行处理链流程
此AbstractNioMessageChannel就是NioServerSocketChannel的内部类
---> ServerBootstrapAcceptor.channelRead() 之前也说过ServerBootstrapAcceptor此类主要为了把读写转给childGroup
---> childGroup.register() 此注册流程和bossGroup一致
---> AbstractUnsafe.register()
---> eventLoop.execute() 此eventLoop和上面的不一样 这里的eventLoop是childGroup的NioEventLoop
把注册方法包装成task添加到任务队列,然后开始
---> NioEventLoop.execute() ---> SingleThreadEventExecutor.execute() ...过程一样,忽略
需要注意的是read方法,这里的read调用不是
NioServerSocketChannel,而是上面构建的NioSocketChannel
---> AbstractNioByteChannel.NioByteUnsafe.read() AbstractNioByteChannel就是NioSocketChannel的内部类
---> NioSocketChannel.doReadBytes() 然后就是大家熟悉的nio -> channel.read()
这就是netty设计的比较好的地方 处理链、NioServerSocketChannel、NioSocketChannel等等...
本人渣渣一枚,写的只是自己的理解,如果有问题或者建议,望评论。感谢
Loading...
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
HTML
1
https://gitee.com/waitShe/images.git
git@gitee.com:waitShe/images.git
waitShe
images
images
master

搜索帮助