美文网首页
netty源码解析

netty源码解析

作者: luncene_e110 | 来源:发表于2019-12-20 14:52 被阅读0次

netty读源码:

搞清楚几个重要的概念

channel

channelPipeline

channelContext

从图中可以看出这几个概念之间的关系

pipeline中包含两个特殊的context,head和tail

以demo中的echo为例:

echoserverhandler实现的是inboundhandler,而headcontext实现了inboundhandler和outboundhanlder,所以读写事件都会处理,前提是做了fireread或者firewrite操作

从代码上看,当我们读消息的时候,到echoServerhanlder就结束了,现在用context写数据就是从echohandler开始

从代码上看是去找当前节点的的前一个outbound的context,就是headcontext,然后headcontext最终写到了outboundbuffer里,echoserverhanlder读完以后,最终做网络写数据的,是ctx.flush(),这个原理和write一样,也是找pre节点

当selector拿到读的请求时,会调用channelpipeline的firechannelread方法,然后从head开始逐个去调用

从headcontext中可以看到,没有做任何处理只是做了fireChannelRead,然后交给下级节点处理

当msg对完后,会调用channelpipeline的fireChannelReadComplete方法,然后流程和read类似

相关文章

网友评论

      本文标题:netty源码解析

      本文链接:https://www.haomeiwen.com/subject/fbgbnctx.html