我有一个 Netty 服务器(3.6.2),它生成一些数据并向订阅的客户端广播。有时有些客户端似乎因为客户端损坏或网络资源状况不佳而无法获取数据。在这种情况下,服务器会填充 Channel 写入队列并不断生成事件,最终这可能会导致 OutOfMemoryError。
一种解决方案是在写入之前检查通道是否为 isWritable() 并且不要以否定的方式写入(无论如何我必须存储这些消息,否则我会丢失它们)。但我宁愿断开在某个时间或以我生成广播事件的速度不刷新写入缓冲区的客户端。
我怎么能那样做?如何实现这个写缓冲区没有被刷新“超时”?如果 isWritable 为假,我应该关闭客户端吗?
我真的很感激任何想法。
谢谢你。