用C++实现HTTP服务器 - 如何控制一个套接字的发送带宽

用C++实现HTTP服务器 - 如何控制一个套接字的发送带宽
作者: 阙荣文
日期: 2011/7/15

目的
对HTTP服务器的每一个客户套接字限制发送带宽.

前提
用IOCP管理套接字,不能阻塞线程影响到别的连接.

如何实现

思路1. 每次调用 WSASend()的时候,计算一下当前带宽,如果超出限制,那么只发送一个最小的包,比如1个字节使带宽慢慢降到合适.
优点: 简单,容易实现.
缺点:除了不能够精确的控制发送带宽外,这种方法还有另一个比较大的问题:即使每次调用WSASend()时只发送1个字节的数据,在网络条件好的情况下,发送速度依然能达到30KB/s左右(我在本机上用 Que's HTTP Server 测试的结果,仅供参考),即带宽最小只能控制在30KB/s,实际意义不大.

思路2.每次调用WSASend()的时候,如果发现速度超限,则计算出下次发送数据的时间点,然后延时发送.
假设: 已发送字节数为 BytesSent, 最大速度限制为 MaxSpeed, 套接字开始发送数据的时间为 StartTime, 那么下次发送数据包的时间 NextSendTime = BytesSent / MaxSpeed + StartTime. 每
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值