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来注册读事件

posted on 2020-04-09 22:25  清浊  阅读(139)  评论(0)    收藏  举报