Netty启动流程
2016-10-11 16:42:51 0 举报
Netty启动流程主要包括以下几个步骤: 1. 创建NioEventLoopGroup,用于处理I/O事件。 2. 创建ServerBootstrap,设置Channel、Handler等参数。 3. 添加ChannelInitializer,用于初始化Channel。 4. 绑定端口,启动服务器。 5. 监听端口,处理客户端连接请求。 6. 接收到客户端请求后,创建ChannelPipeline,将请求交给对应的Handler处理。 7. 处理完客户端请求后,关闭Channel,释放资源。 8. 重复步骤5-7,直到服务器关闭。
作者其他创作
大纲/内容
outbound
eventLoop.execute(new Runnable() { @Override public void run() { register0(promise); } });
next
prev
handlerState = ADD_COMPLETE(2)
tail =
inbound
registered = false
head =
tail
handler()-> this
handlerState = PENDING(1)
handler() -> new ServerHandler()
firstRegistration = true
handler() -> new ServerBootstrapAcceptor
TailContext#0
handler()-> 基于ChannelInitializer 重新实现了 initChannel 方法added = true
pipeline
TaskQueue (主线程 会执行到doBind0时)
executor
register0(promise)
ServerBootstrap$1#0
handlerState = INIT(0)
由主线程启的NioEventLoop的线程。NioEventLoop.run() 方法
initAndRegister()完成了两步工作1、初始化Channel channelFactory.newChannel() -> SelectorProvider.provider().openServerSocketChannel() -> configureBlocking(false)2、将Channel注册到selector上(通过NioEventLoop线程调用 task任务里面的register0方法)
channel
继续执行任务
head
channelFactory -> ReflectiveChannelFactorychannelFactory.clazz = NioServerSocketChannelchannelFactory.newChannel() 通过反射调用 clazz.newInstance()NioServerSocketChannel.ch = java底层的channelNioServerSocketChannel.pipeline = DefaultChannelPipeline
NioServerSocketChannel.pipeline
DefaultChannelHandlerContext
HeadContext#0
ServerHandle#0
pendingHandlerCallbackHead = null维护着一个单向链表
register0 执行完了
pipeline.fireChannelActive();
ServerBootstrap$ServerBootstrapAcceptor#0
TaskQueue
b.bind(8888)
handlerState = INIT(0)handlerState = PENDING(1)handlerState = ADD_COMPLETE(2)
0 条评论
下一页