当前位置:   article > 正文

golang 服务端如何限速的算法模型_go tcp 限速

go tcp 限速

前言

有的软件需要付费加速(实际上是不付费限速),这种逻辑在服务端怎么设计呢?很简单, time.Sleep()

模型预设

// 不同策略下的已知量
v0 ------ 客户端到服务端的平均下载速度
t0 ------ 某个文件在v0速度下传输完成的时间
n ------ 文件分段传输的段数
v1 ------ 策略1下的速度
t2 ------ 策略2下的时间
p% ------ 策略3下的比率

// 求解量
ts ------ 所求得的每段睡眠时间
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

求以下三种策略下的ts:

1. 限速为v1

结论: ts = (v0t0 - t0)/(v1n)

分析:
限速前后,总量一致,即v0t0 = (n*ts + t0)v1

推导:

v0t0 =  v1*(t)
t = v0t0/v1 = n*ts + t0
则ts = t/n = (v0t0 - t0)/(v1n),
  • 1
  • 2
  • 3
2. 限时t2

结论: ts = (t2-t0)/n

分析:
限速前后,存在时间差异,即ts *n +t0 = t2

推导:

ts *n +t0 = t2
则ts = (t2-t0)/n
  • 1
  • 2
3. 限制客户端速率为原本的p%

结论: ts = ((100*t0/p)-t0)/n

分析:
限速前后,平均速度作比为p%, 即v3/v0 = p%

推导:

v3 = (v0t0)/ (ts*n + t0)
p% = v3/v0 = t0/(ts*n +t0)
则ts = ((100*t0/p)-t0)/n
  • 1
  • 2
  • 3
声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop博客】
推荐阅读
相关标签
  

闽ICP备14008679号