Netty业务代码执行流程源码解析

举报
JavaEdge 发表于 2021/06/04 01:51:32 2021/06/04
【摘要】 worker thread 执行示意图 Handler执行资格: 实现了ChannellnboundHandler实现方法channelRead不能加注解@Skip 执行流程 多路复用器( Selector )接收到OP_ READ事件处理 OP_READ事件: NioSocketChannel.NioSocketChannelUnsafe.read分配一个...

worker thread

执行示意图


Handler执行资格:

  • 实现了ChannellnboundHandler
  • 实现方法channelRead不能加注解@Skip

执行流程

  • 多路复用器( Selector )接收到OP_ READ事件
  • 处理 OP_READ事件: NioSocketChannel.NioSocketChannelUnsafe.read
  • 分配一个初始1024字节的byte buffer来接受数据
  • 从 Channet接受数据到byte buffer
  • 记录实际接受数据大小, 调整下次分配byte buffer大小

触发pipeline.fireChannelRead(byteBuf)把读取到的数据传播出去

判断接受 byte buffer是否满载而归:是,尝试继续读取直到没有数据或满16次;否,结束本轮读取,等待下次OP_READ事件

处理业务的本质

数据在pipeline中所有的handler的channelRead()执行过程。

  • Handler要实现io.netty.channel.ChannelnboundHandler#channelRead (ChannelHandlerContext ctx,Object msg),且不能加注解@Skip才能被执行到。
  • 中途可退出,不保证执行到Tail Handler。

默认处理线程就是Channel绑定的NioEventLoop线程,也可以设置其他

pipeline.addLast(new UnorderedThreadPoolEventExecutor(10), serverHandler)

  
 
  • 1

文章来源: javaedge.blog.csdn.net,作者:JavaEdge.,版权归原作者所有,如需转载,请联系作者。

原文链接:javaedge.blog.csdn.net/article/details/111598440

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。