如果客户端读取数据而应用程序继续写入,Netty 关闭通道策略是什么?

问题描述

我的应用程序使用 Netty 4.x 和 TCP 套接字将相同的数据分发给多个客户端。我希望我的应用程序能够容忍某些客户端在接收数据时停顿,但如果客户端速度太慢,我希望我的应用程序放弃(关闭)连接。

如果我理解正确,我可以通过正确配置来实现:

  • sendBufferSize(在底层操作系统允许的范围内)
  • ChannelOption.WRITE_BUFFER_HIGH_WATER_MARK .

Netty Channel.write() 写入 ChannelOutboundBufferChannelOutputBuffers内容写入 NIO SocketChannel。操作系统通过 TCP 向客户端发送数据。

如果客户端没有按时读取其套接字,则操作系统套接sendBuffer 已填满,然后 ChannelOutboundBuffer 已填满,直至达到 WRITE_BUFFER_HIGH_WATER_MARK。接下来通道进入不可写状态(以避免内存不足)。

在这种情况下,Netty 关闭渠道政策是什么?如果处理程序在不可写的情况下继续写入,Netty 是否会关闭通道?

提前感谢您的建议。

解决方法

Netty 的策略是只通知您,并在频道再次可写后重试。否则由用户决定什么是正确的操作。例如关闭连接或停止阅读等