JavaEdge​”,关注公众号


我们自己的线程,如果写在main 方法,那就是

main 线程

在创建 NioEventLoopGroup(创建一组NioEventLoop) 的过程中就创建了 selector

手把手带你调试阅读Netty启动服务流程源码_navicat

手把手带你调试阅读Netty启动服务流程源码_zookeeper_02

这里因为我们当前线程其实是 main 线程,所以为 false

手把手带你调试阅读Netty启动服务流程源码_数据库_03

创建 ServerSocketChannel

手把手带你调试阅读Netty启动服务流程源码_epoll_04


  • 初始化 server socket channel
  • 给 server socket channel 从 boss group 选择一个 NioEventLoop

boss thread

将 serverSocketChannel 注册到选择的 NioEventLoop 的 selector

手把手带你调试阅读Netty启动服务流程源码_navicat_05

绑定地址启动

手把手带你调试阅读Netty启动服务流程源码_zookeeper_06

注册接受连接事件(OP_ACCEPT) 到selector

手把手带你调试阅读Netty启动服务流程源码_zookeeper_07

第一次注册并非监听​​OP_ACCEPT​​,而是0

手把手带你调试阅读Netty启动服务流程源码_navicat_08

最终监听的​​OP_ ACCEPT​​通过bind完成后的fireChannelActive()触发

手把手带你调试阅读Netty启动服务流程源码_数据库_09

NioEventLoop 是通过 Register 操作的执行来完成启动。

手把手带你调试阅读Netty启动服务流程源码_epoll_10

目前交流群已有​ 800+​人,旨在促进技术交流,可关注公众号手把手带你调试阅读Netty启动服务流程源码_navicat_11


手把手带你调试阅读Netty启动服务流程源码_数据库_12

喜欢文章