Nettyyu源码解析(3)-新连接接入
1、检测新连接
NioEventLoop里面
processSelectedKey(key,channel)入口
NioMessageUnsafe.read() while循环一次批量处理
doReadMessage() 创建客户端连接socketchannel
javaChannel().accept()新连接创建好后会调用到后面的ServerBootstrapAcceptor
2、创建NioSocketChannel
new NioSocketChannel(parent,ch)入口
AbstractNioByteChannel(p,ch,op_read)
configureBlocking(false)&save op
create id,unsafe.pipeline
new NioSocketChannelConfig()
setTcpNoDelay(true)禁止Nagle算法,防止小数据包集成到一起发送,可以提供响应速度
3、分配线程及注册selector
AbstractNioMessageChannel里面的
pipeline.fireChannelRead() 对所有新创建的客户端连接socketchannel都要配置以下信息。
在ServerBootstrapAcceptor负责完成客户端连接socketchannel的设置和注册selector
服务端pipeline的构成 Head->ServerBootstrapAcceptor->tail
ServerBootstAcceptor
添加channelhandler
设置options和attrs
选择NioEventLoop注册selector
4、注册读事件
新连接创建完成后会在ServerBootstrapAcceptor注册selector
NioEventGroup.register里面会对所有客户端连接注册selector,并且在注册完成调用pipeline.fireChannelActive()传播客户端连接激活的时候会通过HeadContext来注册读事件
浙公网安备 33010602011771号