本文主要是介绍Netty ServerBootstrap bind和acceptor 事件源代码剖析,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
流程1 :在ServerBootstrap(AbstractBootstrap<B,C>).bind(int) 绑定端口。
1、ServerBootstrap(AbstractBootstrap<B,C>).initAndRegister() 创建一个ServerSocketChannel ,并注册到EventLoop中。
在init时,主要通过工厂方法创建一个ServerSocketChannel ,并初始化。ServerBootstrap.init(Channel)
在init方法里面主要在PipeLine中增加了一个ServerBootstrapAcceptor ,用来处理新连接。
2、 NioEventLoopGroup(MultithreadEventLoopGroup).register(Channel) 把ServerSocketChannel注册到EventLoop 中,并返回一个ChannelFuture .
EventLoop 与ServerSocketChannel 的关系主要由io.netty.util.concurrent.EventExecutorChooserFactory 类来决定。
当EventLoop与ServerSocketChannel关联建立之后。实际执行register代码如下:
@Overridepublic final void register(EventLoop eventLoop, final ChannelPromise promise) {if (eventLoop == null) {throw new NullPointerException("eventLoop");}if (isRegistered()) {promise.setFailure(new IllegalStateException("registered to an event loop already"));return;}if (!isCompatible(eventLoop)) {promise.setFailure(new IllegalStateException("incompatible event loop type: " + eventLoop.getClass().getName()));return;}AbstractChannel.this.eventLoop = eventLoop;if (eventLoop.inEventLoop()) {register0(promise);} else {try {eventLoop.execute(new Runnable() {@Overridepublic void run() {register0(pr
这篇关于Netty ServerBootstrap bind和acceptor 事件源代码剖析的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!