课件和 Demo 地址
https://gitee.com/geektime-geekbang/geek_netty
作者回复: 1 你估计看错了类,所以你没有看懂,你看的那个类估计是DefaultMaxBytesRecvByteBufAllocator 所以我用中文注释了过那个类: “//无人调用,加一个@Deprecated标识下” 2 io.netty.channel.AdaptiveRecvByteBufAllocator.HandleImpl#readComplete会尝试缩小,缩小比例不完全一样(以512为界限,有2种):一种是减小1倍,一种是减小16 3 "什么是16次最优,不是其它的2的幂次方倍?"我意思这个本身不是问题,因为写32的话,别人也会问为什么不是16,“雨露均沾”是说给别人读的机会,所以要控制中的次数。 你每次笔记记得挺细致的,哈哈
作者回复: 直接在已有的handler里或者新的handler里,实现channelActive这个方法:调用ctx带的write方法写欢迎信息。
作者回复: 一次可能读到多个完整的消息,所以传下去有必要,这样至少前面完整的消息能及时处理,一次也可能读不完,传下去也没必要,一方面,后面的处理器会帮你存起来这些半包数据,另外你可以写一些处理器做些别的事情,总体思想还是有数据就往外扔,而不是死等着,因为这是一个数据流,等意义也不大
作者回复: 不会的,后面的数据还会触发读事件,继续新的一波读取。
作者回复: 嗯,多搞搞就好了,搞到最后,大家都还是不是完全懂的,但是都会好点的,包括我自己也是这样。所以你放心加油搞吧。哈哈
作者回复: 丢到一个独立的线程池去做,不然都是顺序处理的了,怎么单独线程池,第五章会介绍,到时候您在看看,有问题再沟通。谢谢
作者回复: 不读完,还会触发读事件的,所以还是能处理到的,只是说把这次机会(否则一直读下去,别的连接就没有什么机会读到了)让出去了。
作者回复: 嗯,那就好,有些节就不能完全做到,只能说尽量做到如此,谢谢!
作者回复: 可以查看下你的线程模型有没有问题(后面的第五章也会提及,IO型的业务要独立出线程池),然后这个问题需要查很多因素,具体可以 参考上次做直播的ppt说到的一个类似问题(第九个问题): https://github.com/geektime-geekbang/geek_netty/ 如果还有疑问,或者不清楚,可以继续提个问题。谢谢
作者回复: 一般情况(你问的情况),op_read一直注册在,不是重新注册,也不需要重新注册。重新注册的场景是出现在自己主动取消读监听后,又重新注册时,比如流量整形的读暂停到读恢复。正常没有开启各种复杂特性时都是一直注册在,所以只要有数据,就自动处理各种handler。