下载软件中的限速是如何实现的

tristan0429 2009-08-21 09:46:06
如题,谢谢!
...全文
1598 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
Dobzhansky 2009-08-21
  • 打赏
  • 举报
回复
学习
wuyq11 2009-08-21
  • 打赏
  • 举报
回复
把连接超时设置到1S以上。
做计数器,记录每秒下载的字节数。
在下载线程中判断“当前秒”中下载的字节数是否超限。超限了就停止下载。
等到下一秒再开始新的下载。 Thread.Sleep(sleep);延迟
http://topic.csdn.net/u/20090211/09/d507b845-6fb8-4bac-a8eb-34b6dcad247f.html
http://topic.csdn.net/t/20060401/14/4655985.html
soaringbird 2009-08-21
  • 打赏
  • 举报
回复
速度是单位时间段内的流量。
下载也是客户端向服务器发出申请,要哪段的数据,服务器把这段返回回来。不限速时就是成功返回后继续发下一段的申请,如果限速,可以在发下次请求前延时一段时间。
tristan0429 2009-08-21
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 zlkingdom 的回复:]
数据包超过限制的流量或者是触发了QoS或ACL规则丢包处理 从而限速 。。。
当第一次发包通过路由时,这时路由没有作出反应,只做转发到目的地功能;
然后有反应回来,当流量接近限速时,会作出扔弃某些包的反应,再向目的地要求再次发送,这样就会发生,下载刚开始超出限制的速度。
内网虽然带宽够,但是路由器的缓存少,不会作保存

最简单的限速就是丢包 像TCP协议这样的可靠连接协议可以通过窗口机制来检测网络拥塞 进行流量控制 而不是简单的重发 滑动窗口本质上是描述接受方的TCP数据报缓冲区大小的数据 发送方根据这个数据来计算自己最多能发送多长的数据 如果发送方收到接受方的窗口大小为0的TCP数据报 那么发送方将停止发送数据 等到接受方发送窗口大小不为0的数据报的到来 。。。
[/Quote]

刚刚没看见,这个看似需要服务器那边控制路由器?
那本地软件点“限速”按钮的时候其实是向服务器发送一个信号??
mythad 2009-08-21
  • 打赏
  • 举报
回复
学习,帮顶!
tristan0429 2009-08-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 falx2004 的回复:]
按时 检查所下载的内容的大小  如果超出了 设定 则稍微的sleep一下
[/Quote]

...

这样子的话其实中间会有段时间是不下载的,重新开始后又会重新连接,但是给用户的 ui 上不让他看出来,是吧?同样对服务器来说和没限速是一样的,那这个“限速功能”有啥用呢?(如:迅雷、qq、bt 等软件)
zlkingdom 2009-08-21
  • 打赏
  • 举报
回复
数据包超过限制的流量或者是触发了QoS或ACL规则丢包处理 从而限速 。。。
当第一次发包通过路由时,这时路由没有作出反应,只做转发到目的地功能;
然后有反应回来,当流量接近限速时,会作出扔弃某些包的反应,再向目的地要求再次发送,这样就会发生,下载刚开始超出限制的速度。
内网虽然带宽够,但是路由器的缓存少,不会作保存

最简单的限速就是丢包 像TCP协议这样的可靠连接协议可以通过窗口机制来检测网络拥塞 进行流量控制 而不是简单的重发 滑动窗口本质上是描述接受方的TCP数据报缓冲区大小的数据 发送方根据这个数据来计算自己最多能发送多长的数据 如果发送方收到接受方的窗口大小为0的TCP数据报 那么发送方将停止发送数据 等到接受方发送窗口大小不为0的数据报的到来 。。。
flyerwing 2009-08-21
  • 打赏
  • 举报
回复
学习下。
falx2004 2009-08-21
  • 打赏
  • 举报
回复
按时 检查所下载的内容的大小 如果超出了 设定 则稍微的sleep一下
tristan0429 2009-08-21
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 wuyq11 的回复:]
把连接超时设置到1S以上。
做计数器,记录每秒下载的字节数。
在下载线程中判断“当前秒”中下载的字节数是否超限。超限了就停止下载。
等到下一秒再开始新的下载。 Thread.Sleep(sleep);延迟
http://topic.csdn.net/u/20090211/09/d507b845-6fb8-4bac-a8eb-34b6dcad247f.html
http://topic.csdn.net/t/20060401/14/4655985.html
[/Quote]

这样做对服务器端来说不是和没限速基本一样吗??和那种电信限制你网速应该有本质区别吧??
hyblusea 2009-08-21
  • 打赏
  • 举报
回复
在应用层主要是通过调节线程的sleep来实现限速。

110,545

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧