【问题标题】:How much data is read when autoRead is false?autoRead 为 false 时读取了多少数据?
【发布时间】:2015-06-13 17:12:21
【问题描述】:

read() 的 Javadoc 说:

请求从 Channel 读取数据到第一个入站缓冲区, 如果读取了数据,则触发 ChannelInboundHandler#channelRead 事件, 并触发 ChannelInboundHandler#channelReadComplete 事件,因此 处理程序可以决定继续阅读。

当手动调用channel.config().setAutoRead(false)read()时,实际读取了多少?假设一个没有编解码器的 TCP 连接,它会读取直到入站缓冲区填满,触发ChannelInboundHandler#channelRead,然后停止读取?

查看proxy example,它会在每个channelRead 中调用一次read(),这似乎意味着read() 和channelRead 事件之间是一对一的。

【问题讨论】:

    标签: java netty


    【解决方案1】:

    socketChannel 添加了一个类,叫做 AdaptiveRecvByteBufAllocator 默认值为

    static final int DEFAULT_MINIMUM = 64;
    static final int DEFAULT_INITIAL = 1024;
    static final int DEFAULT_MAXIMUM = 65536;
    

    所以首先1024 bytes 将被读取,然后它可以根据随后的读取增加或减少。您可以通过添加来调整它

    socketChannel.config().setRecvByteBufAllocator(RecvByteBufAllocator allocator)

    【讨论】:

    • 感谢您的回答!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-15
    • 2012-10-07
    • 2014-12-21
    • 2017-03-28
    • 2012-01-17
    • 1970-01-01
    相关资源
    最近更新 更多