我们正在使用Netty 3.2.3版本,并希望根据一定的计算关闭通道。
我们正在关闭该频道:
channel.setInterestOps(channel.getInterestOps() | Channel.OP_WRITE);
并重新打开:
channel.setInterestOps(channel.getInterestOps() & Channel.OP_WRITE);
但根据表现有些不对劲。 计算与我们正在做的serReadable真/假相同, 这很好。
答案 0 :(得分:1)
Channel.OP_WRITE仅供参考。 Netty使用它来指示I / O线程是否可以立即将数据写入通道。如果channel.isWritable()为false,则Netty将排队任何其他数据,直到通道可以接受它为止。如果在isWritable()为false时继续写入数据,那么最终可能会遇到OutOfMemoryError。
我假设你不想真正关闭频道,只是停止写信。正确的方法是在每次发送后检查channel.isWritable(),或者接收ChannelStateEvent(可能通过覆盖SimpleChannelUpstreamHandler.channelInterestChanged())并暂停您将数据写入通道的任何应用程序进程。
在任何一种情况下,您都希望收到ChannelStateEvent以了解何时可以再次开始写入该频道。