龙空技术网

Netty ServerBootstrap 绑定端口流程分析

AI华哥部落 169

前言:

而今姐妹们对“怎样用服务器搭建节点系统设置网络端口”大体比较关切,小伙伴们都想要分析一些“怎样用服务器搭建节点系统设置网络端口”的相关内容。那么小编也在网摘上搜集了一些对于“怎样用服务器搭建节点系统设置网络端口””的相关知识,希望你们能喜欢,兄弟们快快来了解一下吧!

本文基于Netty 4.1.49源码分析ServerBootstrap绑定端口的流程,本文只是自己整理的流水式的流程,不适合学习之用。

使用例子

先用官方的DiscardServer作为例子,部分源码截图如下:

红框bind方法就是我们要分析的内容

步骤一 创建NioServerSocketChannel实例创建ServerSocketChannel实例保存感兴趣的Select事件: SelectionKey.OP_ACCEPT(只是保存还没注册Select)设置ServerSocketChannel非阻塞模式创建一个唯一的channel ID创建一个Unsafe实例创建一个ChannelPipeline步骤二 配置NioServerSocketChannel实例增加一个 ServerBootstrapAcceptor (ChannelHandler) 步骤三 绑定一个NioEventLoop实例从NioEventGroup选择一个 NioEventLoop 绑定到channel中步骤四 注册Select把ServerSocketChannel实例注册到NioEventLoop的Select实例中,不注册任何事件。步骤五 绑定端口委托给channel.bind方法委托给channel的pipeline.bind方法委托给pipeline的tail.bind方法(TailContext)委托给pipeline的head.bind方法(HeadContext)委托给channel的unsafe.bind方法委托给channel的doBind方法,此处才调用ServerSocketChannel实例绑定端口。步骤六 向Select注册 OP_ACCEPT事件绑定端口后,传播channelActive 事件: pipeline.fireChannelActive()pipeline的head节点被触发channelActive方法调用readIfIsAutoRead方法委托给 channel.read方法委托给 pipeline.read(); 传播read事件cong tail.read();传播read事件head.read 处理read事件(HeadContext节点)委托给unsafe.beginRead();委托给channel.doBeginRead(); 此次才把SelectionKey.OP_ACCEPT注册到Select中总结

整个流程比较绕。不过主要关注几点即可。

绑定eventLoop注册select绑定端口注册OP_ACCEPT事件

标签: #怎样用服务器搭建节点系统设置网络端口