如何关闭写作频道
Posted
技术标签:
【中文标题】如何关闭写作频道【英文标题】:how to close the Channel for Writing 【发布时间】:2011-11-22 02:13:24 【问题描述】:我们使用的是Netty 3.2.3版本,想根据一定的计算关闭通道写入。
我们将通过以下方式关闭频道:
channel.setInterestOps(channel.getInterestOps() | Channel.OP_WRITE);
并通过以下方式重新打开它:
channel.setInterestOps(channel.getInterestOps() & Channel.OP_WRITE);
但是根据表现,有些地方是错误的。 计算和我们做 serReadable true/false 一样, 这工作正常。
【问题讨论】:
【参考方案1】:Channel.OP_WRITE 仅供参考。 Netty 使用它来指示 I/O 线程是否可以立即将数据写入通道。如果 channel.isWritable() 为 false,则 Netty 将排队任何进一步的数据,直到它可以被通道接受。如果在 isWritable() 为 false 时继续写入数据,则最终可能会遇到 OutOfMemoryError。
我假设您并不想真正关闭频道,只需停止写入即可。正确的方法是在每次发送后检查 channel.isWritable(),或者接收 ChannelStateEvent(可能通过覆盖 SimpleChannelUpstreamHandler.channelInterestChanged())并暂停正在将数据写入通道的任何应用程序进程。
在任何一种情况下,您都希望收到 ChannelStateEvent 以了解何时可以再次开始写入通道。
【讨论】:
以上是关于如何关闭写作频道的主要内容,如果未能解决你的问题,请参考以下文章