面试官:netty的读事件循环停止的条件是什么?
先看源码:
NIOByteUnsafe:
maxMessageHandler:
四个条件判断:是否是自动读、是否有数据读【attemptedByteRead == lastBytesRead】、是否超过最大读取次数、第一次读取时是否读到了数据
NIOSocketChannel:
可能有人会疑惑RecvByteBufAllocator是干嘛的?
是专门用来负责监控从TCP缓冲区往直接内存中读取数据的;
LastBybeRead监控上次读取的数据的字节数;
IncMessagesRead记录总的读取次数;
ContinueReading控制读取过程结束【Tcp缓冲区内是否还有数据(有多重判断方式,如:attemptedByteRead == lastBytesRead)