如果客户端确实读取数据并且应用程序继续写入,Netty 关闭通道策略是什么?
What is Netty closing channel policy if client does read data and application keeps writing?
我的应用程序使用带有 TCP 套接字的 Netty 4.x 将相同的数据分发给多个客户端。我希望我的应用程序能够容忍一些客户端在数据接收时停顿,但如果客户端太慢,我希望我的应用程序放弃(关闭)连接。
如果我理解正确的话,我可以通过适当的配置来实现:
- sendBufferSize(在底层OS允许的范围内)
ChannelOption.WRITE_BUFFER_HIGH_WATER_MARK
.
Netty Channel.write()
写入 ChannelOutboundBuffer
。 ChannelOutputBuffers
的内容写入NIO SocketChannel。操作系统通过TCP向客户端发送数据。
如果客户端没有按时读取其套接字,OS 套接字 sendBuffer
会填满,然后 ChannelOutboundBuffer
会填满,直至达到 WRITE_BUFFER_HIGH_WATER_MARK
。接下来通道进入不可写状态(以避免内存不足)。
在这种情况下 Netty 关闭通道的策略是什么?如果处理程序继续写入通道,尽管它不可写,Netty 是否会关闭通道?
提前感谢您的任何建议。
Netty 的政策是只通知您,并在通道再次可写后重试。否则由用户决定什么是正确的操作。例如关闭连接或停止阅读等
我的应用程序使用带有 TCP 套接字的 Netty 4.x 将相同的数据分发给多个客户端。我希望我的应用程序能够容忍一些客户端在数据接收时停顿,但如果客户端太慢,我希望我的应用程序放弃(关闭)连接。
如果我理解正确的话,我可以通过适当的配置来实现:
- sendBufferSize(在底层OS允许的范围内)
ChannelOption.WRITE_BUFFER_HIGH_WATER_MARK
.
Netty Channel.write()
写入 ChannelOutboundBuffer
。 ChannelOutputBuffers
的内容写入NIO SocketChannel。操作系统通过TCP向客户端发送数据。
如果客户端没有按时读取其套接字,OS 套接字 sendBuffer
会填满,然后 ChannelOutboundBuffer
会填满,直至达到 WRITE_BUFFER_HIGH_WATER_MARK
。接下来通道进入不可写状态(以避免内存不足)。
在这种情况下 Netty 关闭通道的策略是什么?如果处理程序继续写入通道,尽管它不可写,Netty 是否会关闭通道?
提前感谢您的任何建议。
Netty 的政策是只通知您,并在通道再次可写后重试。否则由用户决定什么是正确的操作。例如关闭连接或停止阅读等