场景一:高并发场景下,服务端处理过慢会导致客户端消息积压.
解决方案,除了服务端做流控,客户端也需要做并发保护,防止自身发生消息积压
Netty也提供了高低水位机制
当发送队列待发送的字节数组达到高水位时,对应的Channel就变为不可写状态。
通过对Channel的可写状态进行判断来决定是否发送消息
设置高水位
ctx.channel().config().setWriteBufferHighWaterMark(10*1024*1024);
判断是否可写
if(ctx.channel().isWritebale()){
msg= .....
ctx,writeAndFlush(msg)
}
场景二:
网络瓶颈,当消息发送速度超过网络链接处理能力,会导致发送队列积压
场景三
对端读取速度小于已方发送速度,导致自身TCP发送缓冲区满,频繁发送write 0字节,待发送消息会在Netty发送队列中排队。
网友评论