如何关闭写作频道

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 以了解何时可以再次开始写入通道。

【讨论】:

以上是关于如何关闭写作频道的主要内容,如果未能解决你的问题,请参考以下文章

如何在Roku频道中传输Youtube视频? [关闭]

如何编写SQL查询以通过频道和节目播放以下数据? [关闭]

使用 iPhone 的流媒体频道? [关闭]

我想在机器人关闭或打开的某个频道中发送一条消息

Discord.js - 允许特定频道中的命令[关闭]

何时关闭频道[重复]