Netty业务代码执行流程源码解析
【摘要】 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)