1 Netty读数据的技巧
1.1 AdaptiveRecvByteBufAllocator
自适应数据大小的分配器。打水时,拿多大桶去装?
小了不够,大了浪费。所以根据自己实际装预估下次情况,从而决定下次带多大桶。
AdaptiveRecvByteBufAllocator对bytebuf的猜测
1.2 defaultMaxMessagesPerRead
连续读。 排队打水时,假设当前桶装满了,这时你会觉得可能还要打点水才够用,所以直接拿个新桶等装,而非回家,直到后面出现
等原因才停止,回家。
2 执行流程
如下都是worker线程的事。
多路复用器( Selector )接收到OP_READ事件 处理OP_READ事件:NioSocketChannel.NioSocketChannelUnsafe.read()
和连接事件类似,我们肯定还是主要在 NioEventLoop
此处先处理的 OP_ACCEPT 建立连接事件,直接让它过了
这次来的才是处理读请求的
3 读取数据的根本 API
sun.nio.ch.SocketChannellmpl#read(java.nio.ByteBuffer)
4 read方法区别
5 fireChannelRead区别
6 为啥最多只尝试读16次?
给别人留机会。