这篇文章主要介绍Netty分布式编码器及写数据事件处理使用场景的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!我们之前在学习pipeline的时候,讲解了write事件的传播过程,但在实际使用的时候,我们通常不会调用channel的write方法,因为该方法只会写入到发送数据的缓存中,并不会直接写入channel中,如果想写入到channel中,还需要调用flush方法实际使用过程中,我们用的更多的是writeAndFlush方法,这方法既能将数据写到发送缓存中,也能刷新到channel中学过netty的同学们对此肯定不陌生,通过这种方式,可以将数据发送到channel中,对方可以收到响应首先会走到AbstractChannel的writeAndFlush:继续跟到DefualtChannelPipeline中的writeAndFlush方法中:这里我们看到, writeAndFlush是从tail节点进行传播,有关事件传播,我们再pipeline中进行过剖析,相信这个不会陌生继续跟,会跟到AbstractChannelHandlerContext中的writeAndFlush方法:继续跟:继续跟write方法:这里的逻辑我们也不陌生,找到下一个节点,因为writeAndFlush是从tail节点开始的,并且是outBound的事件,所以这里会找到tail节点的上一个ou免费云主机域名tBoundHandler,有可能是编码器,也有可能是我们业务处理的handlerif(executor.inEventLoop())判断是否是eventLoop线程,如果不是,则封装成task通过nioEventLoop异步执行,我们这里先按照是eventLoop线程分析首先,这里通过flush判断是否调用了flush,这里显然是true,因为我们调用的方法是writeAndFlush这里就真相大白了,其实在writeAndFlush中,首先调用write, write完成之后再调用flush方法进行的刷新首先跟到invokeWrite0方法中:该方法我们在pipeline中已经进行过分析,就是调用当前handler的write方法,如果当前handler中write方法是继续往下传播,在会继续传播写事件,直到传播到head节点,最后会走到HeadContext的write方法中跟到HeadContext的write方法中:这里通过当前channel的unsafe对象对将当前消息写到缓存中,写入的过程,我们之后的小节进行分析回到到invokeWriteAndFlush方法中:同样,这里会调用当前handler的flush方法,如果当前handler的flush方法是继续传播flush事件,则flush事件会继续往下传播,直到最后会调用head节点的flush方法,如果我们熟悉pipeline的话,对这里的逻辑不会陌生跟到HeadContext的flush方法中:这里同样,会通过当前channel的unsafe对象通过调用flush方法将缓存的数据刷新到channel中,有关刷新的逻辑,我们会在以后的小节进行剖析以上是“Netty分布式编码器及写数据事件处理使用场景的示例分析”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注百云主机行业资讯频道!
这篇文章主要介绍了TypeScri免费云主机域名pt如何使用Omit,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。巧用Omit有时候我们需要复用一个类型,但是又不需要此类型内的全部属性,因此需要…
免责声明:本站发布的图片视频文字,以转载和分享为主,文章观点不代表本站立场,本站不承担相关法律责任;如果涉及侵权请联系邮箱:360163164@qq.com举报,并提供相关证据,经查实将立刻删除涉嫌侵权内容。