流量整形工作原理及源码分析
消息读取的流量整形
消息发送流量整形
流量整形工作原理及源码分析
流量整形工作原理:拦截channelRead()和write()方法,计算当前需要发送的消息大小,对读取和发送阈值进行判断,如果达到了阈值,则暂停读取和发送消息,待下一个周期继续处理,以实现在某个周期内对消息读写速度进行控制。
消息读取的流量整形
以ChannelTrafficShapingHandler为例,消息读取的流量整形工作流程如图:

(1) 在解码之前拦截channelRead(),计算读取的ByteBuf大小,源码如下(AbstractTrafficShapingHandler):
protected long caculateSize(Object msg){
if(msg instanceof ByteBuf){
return ((ByteBuf) msg).readableBytes();
}
if(msg instanceof ByteBufHolder){
return ((ByteBufHolder) msg).content().readableBytes();
}
return -1;
}
(2) 计算需要暂停读取消息的等待时间,源码如下(TrafficCounter):
public long readTimeToWait(final long size, final long limitTraffic, final long maxTime, final long now){
bytesRecvFlowControl(szie);
if(size == 0 || limitTraffice == 0){
return 0;
}
final long lastTimeCheck = lastTime.get();
long sum = currentReadBytes.get();
long localReadTime = readingTime;
long lastRB = lastReadBytes;
final long interval = now - lastTimeCheck;
long pastDelay = Math.max(this.lastReadingTime - lastTimeCheck, 0L);
if(interval > 10L){
long time = sum * 1000 / limit

本文深入解析流量整形技术的工作原理,包括消息读取和发送的流量控制机制,通过源码分析展示了如何在特定周期内控制消息读写速度,实现网络资源的有效管理和优化。
899

被折叠的 条评论
为什么被折叠?



