我正在使用 Netty Channels,当通过通道发送大量数据时,我注意到该Channel.channelInterestChanged
事件被触发,这立即导致Channel.isWritable()
返回 false。(有另一个线程在执行 aChannel.write()
并且该线程立即失败)。我的问题是:为什么频道的兴趣会发生变化?或者更确切地说,是谁在改变它?我编写的代码(服务器或客户端)中的任何内容都不会改变兴趣。
问问题
1147 次
1 回答
3
它会发生变化,因为您将更多数据写入通道,然后它可以在给定时间内传输。Netty 为您排队数据,直到达到某个阈值,一旦达到,Channel.isWritable() 将返回 false。
如果您想在 Channel.isWritable() 返回 false 之前更改允许排队/缓冲的字节数,则必须调整 writeBufferHighWaterMark 和 writeBufferLowWaterMark。
ServerBootstrap sb = ....
sb.setOption("writeBufferHighWaterMark", ..);
sb.setOption("writeBufferLowWaterMark", ..);
无论如何,您应该确保调用 Channel.write(...) 的代码确实检查 Channel.isWritable() 并且只有在它返回 true 时才写入。您遇到的问题经常出现在慢速网络中。
[1] http://netty.io/docs/stable/api/org/jboss/netty/channel/socket/nio/NioChannelConfig.html
于 2012-04-13T06:00:32.387 回答