【发布时间】:2010-04-17 00:39:00
【问题描述】:
我在 Windows 上使用原始套接字,并试图找到一种方法来限制一组套接字的最大连接速度。
例如,我有 3 个套接字连接到 3 个服务器,并且希望将总下载速度限制为 1mb。
我用谷歌搜索并找不到任何相关的东西。有什么想法吗?
【问题讨论】:
我在 Windows 上使用原始套接字,并试图找到一种方法来限制一组套接字的最大连接速度。
例如,我有 3 个套接字连接到 3 个服务器,并且希望将总下载速度限制为 1mb。
我用谷歌搜索并找不到任何相关的东西。有什么想法吗?
【问题讨论】:
如果您想将下载速度限制为每秒 1 MB,请以这样的方式管理您的 recv() 调用,使您在一秒钟内的 recv() 不超过 1 MB。读取最大 1 MB 后,限制线程(使用 ThreadSleep)直到下一秒。这只是一个简单的方法。
【讨论】:
我认为实现这一点的唯一方法是艰难的方法...通过测量在最后(这么多)秒内每个套接字上发送/接收的数据量,并推迟发送/接收更多数据,直到经过足够的时间以将总平均带宽限制在您想要的范围内。我已经使用非阻塞套接字和 select() 实现了这个逻辑,并且它是可行的(虽然并不容易)。
【讨论】:
这就像问“我想从我的硬盘驱动器读取一半的速度”。或者“我只想使用 50% 的 CPU 周期”。没有意义,它会尽可能快。如果更多的程序竞争资源,那么操作系统就必须确保每个人都获得公平的份额。如果您不想要公平共享,那么只需降低执行读取的线程的线程优先级。或者调用 Sleep()。
【讨论】: