netty 服务端和客户端创建流程

来源:互联网 发布:kali linux 字典 编辑:程序博客网 时间:2024/06/07 02:05

netty 服务端创建的流程
1. ServerBootstrap NIO 服务端启动辅助类,设置各种必要的参数 使用builder模式,解决构造函数参数过多并且不确定问题
2. EventLoopGroup selector 线程池
系统中有两个Reactor线程组

  1. 服务端用于监听和接收客户端连接的Reactor线程组
  2. 处理I/O读写的Reactor线程组
  1. 绑定NioServerSocketChannel 服务端channel
  2. 设置TCP连接参数
    backlog 表示的是未连接队列(当前连接服务器处于SYN_RECV状态)和 已完成连接队列(ESTABLISHED状态) 两个队列总和的最大值
  3. TCP 链路建立时创建ChannelPipeline()
  4. 添加并设置ChannelHandler()
    启动辅助类和父类分别指定handler,父类的handler作用是工厂类,为每一个客户端创建一个handler
    辅助类的作用是所有监听端口的客户端都会执行它。

这里写图片描述

  1. 绑定并启动监听端口
  1. initAndRegister 创建,初始化和NioServerSocketChannel
  2. 将其注册到Reactor上, 注册方式使用promise,启动异步线程进行注册。
  1. Selector轮询。 由Reactor线程NioEventLoop负责调度和执行Selector轮询操作,选择准备就绪的Channel集合.
  2. 执行ChannelPipeline的相应的方法, 最终调度并执行ChannelHandler。
  3. 执行用户自定义的ChannelHandler

netty 客户端创建的流程
这里写图片描述
1. Bootstrap实例
2. 创建处理客户端连接、I/O读写的Reactor线程NioEventLoopGroup
3. 创建NioSocketChannel
4. 创建默认的Channel Handler Pipeline, 用于调度和执行网路事件
5. 发起TCP连接, 判断连接是否成功。如果成功,将NioSocketChannel注册到多路复用上,监听读操作位
6. 注册对应的网络监听状态位到多路复用器
7. 多路复用器在I/O现场中轮询各Channel, 处理连接结果。
8. 如果连接成功,设置Future结果, 发送连接成功事件, 触发ChannelPipeline执行
9. 由ChannelPipeline 调度执行系统和用户的ChannelHandler, 执行业务逻辑。

处理超时,在创建NIOSocketChannel的时候,注册一个超时的定时器,如果定时器执行了,说明超时了,关闭链路,再做后续的操作。
如果在定时器执行之前返回了,就删除了定时器

原创粉丝点击