本文通过源码分析Netty是如何一步步的将接收客户端的新连接,然后将连跟NioEventLoop绑定,并注册相应的Read事件。

新连接接入的入口

NioMessageUnsafe的read方法

NioServerSocketChannel类里的doReadMessages
Netty通过new 关键字直接创建NioSocketChannel。主要做了如下几步:

AbstractNioByteChannel构造方法

AbstractNioChannel构造方法

AbstractChannel构造方法

NioSocketChannelConfig构造方法

Nagle算法设置为false
在接收完连接,并封装成NioSocketChannel后,在NioMessageUnsafe的read方法里,通过pipeline触发channelRead事件。

注册事件的入口
之后会在ServerBootstrapAcceptor(这个handler会在服务器bind的方法里添加到NioServerSocketChannel里)这个handler里完成如下步骤

ServerBootstrapAcceptor的channelRead方法

SingleThreadEventLoop的register方法

AbstractUnsafe人register方法

调用doRegister完成具体的注册

AbstractNioChannel类的doRegister方法
将NioSocketChannel绑定到selector后,需要注册相应的I/O事件,这样channel就能通过事件响应业务请求了,chennel注册读事件的流程比较长,最终会调用到AbstractUnsafe类的beginRead方法里:

AbstractUnsafe的beginRead方法

AbstractNioChannel的doBeginRead方法