什么是流量整形?
Netty 中流量整形逻辑概述
Netty 对读写流控的判断是基于固定窗口(相对于滑动窗口、令牌)的判断,按照一定时间段 checkInterval (1s) 来统计;
当 writeLimit / readLimit 设置为 0 时,表示关闭写 / 读整形;
等待时间的范围控制
10ms(MINIMAL_WAIT) -> 15s(maxTime);
读流控的实现逻辑
取消读事件监听;
让读缓冲区满;
然后对端写缓冲区满;
然后对端写不进入;
对端对数据进行丢弃或者减缓发送速率;
写流控的实现逻辑
待发数据写入 Queue;
等待超过 4s(maxWriteDelay) || 单个 channel 缓存的数据超过 4M(maxWriteSize) || 所有缓存数据超过 400M(maxGlobalWriteSize) 时修改写状态为不可写;
流量整形的使用
ChannelTrafficShappingHandler
GlobalTrafficShapingHandler @Sharable
GlobalChannelTrafficShappingHandler | @Sharable | 构造器参数见如下代码:
/**
* Create a new instance.
*
* @param executor
* the {@link ScheduledExecutorService} to use for the {@link TrafficCounter}.
* @param writeGlobalLimit
*