Netty分布式pipeline管道传播outBound事件的示例分析


这篇文章将为大家详细讲解有关Net免费云主机域名ty分布式pipeline管道传播outBound事件的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在我们业务代码中, 有可能使用wirte方法往写数据:当然, 直接调用write方法是不能往对方channel中写入数据的, 因为这种方式只能写入到缓冲区, 还要调用flush方法才能将缓冲区数据刷到channel中, 或者直接调用writeAndFlush方法, 有关逻辑, 我们会在后面章节中详细讲解, 这里只是以wirte方法为例为了演示outbound事件的传播的流程这两种写法有什么区别, 我们首先跟到第一种写法中去:这里获取ctx所绑定的channel我们跟到AbstractChannel的write方法中:这里pipeline是DefaultChannelPipeline这里调用tail节点write方法,这里我们应该能分析到, outbound事件,是通过tail节点开始往上传播的,带着这点猜想,我们继往下看其实tail节点并没有重写write方法,最终会调用其父类AbstractChannelHandlerContext的write方法AbstractChannelHandlerContext的write方法:我们看到这里有个newPromise()这个方法,这里是创建一个Promise对象,有关Promise的相关知识我们会在以后的章节剖析我们继续跟write:继续跟write:这里跟我们上一小节剖析过channelRead方法有点类似,但是事件传输的方向有所不同,这里findContextOutbound()是获取上一个标注outbound事件的HandlerContext这里的逻辑我们似曾相识,跟我们上一小节的findContextInbound()方法有点像,只是过程是反过来的在这里,会找到当前context的上一个节点,如果标注的事件不是outbound事件,则继续往上找,意思就是找到上一个标注outbound事件的节点这里将找到节点赋值到next属性中因为我们之前分析的write事件是从tail节点传播的,所以上一个节点就有可能是用户自定的handler所属的context然后判断是否为当前eventLoop线程,如果是不是,则封装成task异步执行,如果不是,则继续判断是否调用了flush方法,因为我们这里没有调用,所以会执行到next.invokeWrite(m, promise),我们继续跟invokeWrite这里会判断当前handler的状态是否是添加状态,这里返回的是true,将会走到invokeWrite0(msg, promise)这一步这里的逻辑也似曾相识,调用了当前节点包装的handler的write方法,如果用户没有重写write方法,则会交给其父类处理我们跟到ChannelOutboundHandlerAdapter的write方法中看:这里调用了当前ctx的write方法,这种写法和我们小节开始的写法是相同的,我们回顾一下:我们跟到其write方法中,这里走到的是AbstractChannelHandlerContext类的write方法:又是我们所熟悉逻辑,找到当前节点的上一个标注事件为outbound事件的节点,继续执行invokeWrite方法,根据之前的剖析,我们知道最终会执行到上一个handler的write方法中走到这里已经不难理解, ctx.channel().write(“test data”)其实是从tail节点开始传播写事件,而ctx.write(“test data”)是从自身开始传播写事件所以,在handler中如果重写了write方法要传递write事件,一定采用ctx.write(“test data”)这种方式或者交给其父类处理处理,而不能采用ctx.channel().write(“test data”)这种方式,因为会造成每次事件传输到这里都会从tail节点重新传输,导致不可预知的错误如果用代码中没有重写handler的write方法,则事件会一直往上传输,当传输完所有的outbound节点之后,最后会走到head节点的wirte方法中我们看到write事件最终会流向这里,通过unsafe对象进行最终的写操作有关inbound事件和outbound事件的传输,可通过下图进行说明:关于“Netty分布式pipeline管道传播outBound事件的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,使各位可以学到更多知识,如果觉得文章不错,请把它分享出去让更多的人看到。

相关推荐: 怎么选择合肥小程序开发公司

这篇文章主要介绍了怎么选择合肥小程序开发公司,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1、无正规资质证书的开发公司不要选当你咨询到的合肥小程序开发公司,都无法供给企业营业执照,都没无法供给对…

免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。

Like (0)
Donate 微信扫一扫 微信扫一扫
Previous 07/23 22:12
Next 07/23 22:12

相关推荐