Netty中为啥执行channelReadComplete但是不执行channelRead

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Netty中为啥执行channelReadComplete但是不执行channelRead相关的知识,希望对你有一定的参考价值。

收到的消息没有指定的结束标记。 比如指定了lineBasedFrameDecoder,没有换行标志,是不会调用channelRead方法的,其他的类似 参考技术A if (如果是登录报文)
//处理登录信息
else // 其它报文
// 这句话就是调用下一个channelRead
ctx.fireChannelRead(msg);

Netty 5.0为啥被舍弃?原因竟然是...



Netty当前的版本:

  • User guide for 4.x - RECOMMENDED VERSION

  • User guide for 3.x

  • User guide for 5.x - ABANDONED VERSION - NOT SUPPORTED


    4.x版本是当前官方推荐,4.x版本目前一直在维护中,值得称赞!    

    3.x版本是比较旧的版本,跟4.x版本相比变化比较大,特别是API。

    5.x是被舍弃的版本,官方不再支持!


    Netty 5.0以前是发布alpha版。听到你Netty 5.0不继续开发了,这个是相当大的吃惊,目前也有一部分书籍是基于Netty5来讲的,所以给那些初学者也是很郁闷的赶脚。

    为啥呢?看看GitHub上怎么作者怎么回复的吧?


    The major change of using a ForkJoinPool increases complexity and has not demonstrated a clear performance benefit. Also keeping all the branches in sync is quite some work without a real need for it as there is nothin in current master which I think justifies a new major release.

Things that we should investigate to prepare for this change:

    Deprecate exceptionCaught in ChannelHandler, only expose it in ChannelInboundHandler Expose EventExecutorChooser from MultithreadEventExecutorGroup to allow the user more flexibility to choose next EventLoop Add another method to be able to send user events both ways in the pipeline. (#4378)


主要意思:

    使用ForkJoinPool增加了复杂性,并且没有显示出明显的性能优势。同时保持所有的分支同步是相当多的工作,没有必要。


        https://github.com/netty/netty/issues/4466



    目前推荐使用的版本是Netty 4.0 or 4.1(我推荐) 。加油,Nettyer 。



以上是关于Netty中为啥执行channelReadComplete但是不执行channelRead的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Netty 从 UDP 消息中只给我 768 个字节

netty 传输数据为啥要序列化

tomcat nio 为啥不比netty

为啥我们真的需要多个 netty boss 线程?

Netty:Netty为啥去掉支持AIO?

Netty 5.0为啥被舍弃?原因竟然是...