博客
关于我
Netty——客户端Accpt源码分析
阅读量:797 次
发布时间:2023-03-28

本文共 1093 字,大约阅读时间需要 3 分钟。

Netty中的请求处理与连接管理

Netty中的reactor线程

Netty的核心运转依赖于两种类型的reactor线程:boos线程组和worker线程组。Boos线程组负责监听新连接并将其封装为channel对象后交给worker线程组处理,而worker线程组则专门处理连接的读写操作。无论是boos线程还是worker线程,其工作流程均包含以下三个步骤:

  • 轮询selector上的IO事件:boos线程通常轮询accept事件,worker线程轮询read/write事件。
  • 处理IO事件:根据事件类型执行相应的操作,如accept新连接或处理读写数据。
  • 执行异步任务:将需要延迟处理的任务提交给eventLoop进行处理。
  • 新连接的建立

    当服务端启动后,服务端的channel注册到boos reactor线程中,reactor线程开始监控selector。随着时间的推移,当有新的连接到达时,boos线程会检测到accept事件并触发相应处理:

    • NioEventLoop.java中的processSelectedKey方法会检查SelectionKey的有效性,如果检测到accept事件,就调用unsafe.read(),处理新连接。

    channel对象的创建与管理

    新连接建立后,Netty会创建一个NioSocketChannel对象,并将其添加到pipeline中。NioSocketChannel继承自AbstractNioChannel,初始化时会配置为非阻塞模式,并设置相关的事件处理器。

    • NioSocketChannel.java的构造函数会创建一个新的channel,并初始化相关配置。
    • AbstractNioChannel.java负责管理channel的注册和事件处理,包括读取和写入操作。

    读事件的注册与处理

    在新连接建立后,Netty会立即开始读取数据。具体流程如下:

  • AbstractNioChannel.javadoBeginRead方法会将channel注册到selector上,表示该channel开始关注read事件。
  • NioMessageUnsafe.java中的read方法会调用doReadMessages,逐个读取消息并将其传递给pipeline进行处理。
  • 总结

    Netty通过boos线程组和worker线程组的协作,实现了新连接的接收与处理。boos线程负责监听新连接并将其封装为channel对象,worker线程则负责读写事件的处理。这种设计保证了Netty框架的高效性和灵活性,能够在非阻塞模式下处理大量并发连接。

    转载地址:http://qohfk.baihongyu.com/

    你可能感兴趣的文章
    Objective-C实现某文件夹下文件重命名(附完整源码)
    查看>>
    Objective-C实现查找second Largest Element第二大元素算法(附完整源码)
    查看>>
    Objective-C实现查找整数数组中给定的最小数字算法(附完整源码)
    查看>>
    Objective-C实现查找给定节点数的树中可能的二叉搜索树的数量树算法(附完整源码)
    查看>>
    Objective-C实现查找链表的中间元素算法(附完整源码)
    查看>>
    Objective-C实现样条插值(附完整源码)
    查看>>
    Objective-C实现根据cpu和磁盘序列号生成注册码( 附完整源码)
    查看>>
    Objective-C实现格雷码序列算法(附完整源码)
    查看>>
    Objective-C实现桥接模式(附完整源码)
    查看>>
    Objective-C实现检查一个数字是否可以被另一个数字整除算法(附完整源码)
    查看>>
    Objective-C实现检查一年是否是闰年算法 (附完整源码)
    查看>>
    Objective-C实现检查三个点在 3D 中是否共线算法(附完整源码)
    查看>>
    Objective-C实现检查字符串是否包含字母表中所有字母的算法(附完整源码)
    查看>>
    Objective-C实现检查字符是否为字母算法(附完整源码)
    查看>>
    Objective-C实现检查数字是否为偶数算法(附完整源码)
    查看>>
    Objective-C实现检查数字是否为奇数算法(附完整源码)
    查看>>
    Objective-C实现检查给定图中是否存在循环算法(附完整源码)
    查看>>
    Objective-C实现检查给定字符串是否在camelCase中算法(附完整源码)
    查看>>
    Objective-C实现检查给定的字符串是否在kebabcase中算法(附完整源码)
    查看>>
    Objective-C实现检查给定的字符串是否在snake_case中算法(附完整源码)
    查看>>