Netty-流量整形工作机制

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

   流量整形工作原理及源码分析
      消息读取的流量整形
      消息发送流量整形


流量整形工作原理及源码分析

     流量整形工作原理:拦截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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值