限制套接字的最大速度
Posted
技术标签:
【中文标题】限制套接字的最大速度【英文标题】:Limiting max speed of sockets 【发布时间】:2010-04-17 00:39:00 【问题描述】:我在 Windows 上使用原始套接字,并试图找到一种方法来限制一组套接字的最大连接速度。
例如,我有 3 个套接字连接到 3 个服务器,并且希望将总下载速度限制为 1mb。
我用谷歌搜索并找不到任何相关的东西。有什么想法吗?
【问题讨论】:
【参考方案1】:如果您想将下载速度限制为每秒 1 MB,请以这样的方式管理您的 recv() 调用,使您在一秒钟内的 recv() 不超过 1 MB。读取最大 1 MB 后,限制线程(使用 ThreadSleep)直到下一秒。这只是一个简单的方法。
【讨论】:
其中一个问题是您可能需要足够小的数据包大小以足够快地通过循环以能够休眠。但这会让一切变得更慢。【参考方案2】:我认为实现这一点的唯一方法是艰难的方法...通过测量在最后(这么多)秒内每个套接字上发送/接收的数据量,并推迟发送/接收更多数据,直到经过足够的时间以将总平均带宽限制在您想要的范围内。我已经使用非阻塞套接字和 select() 实现了这个逻辑,并且它是可行的(虽然并不容易)。
【讨论】:
【参考方案3】:这就像问“我想从我的硬盘驱动器读取一半的速度”。或者“我只想使用 50% 的 CPU 周期”。没有意义,它会尽可能快。如果更多的程序竞争资源,那么操作系统就必须确保每个人都获得公平的份额。如果您不想要公平共享,那么只需降低执行读取的线程的线程优先级。或者调用 Sleep()。
【讨论】:
+1 让“系统”处理负载。在大多数情况下,给予能够快速全力以赴的人会让事情完成得更快。但我想有时你需要对你的视频提要友好。 问题是它目前占用了所有用户的下载带宽,所以允许他们限制它会很好。以上是关于限制套接字的最大速度的主要内容,如果未能解决你的问题,请参考以下文章
在 Windows 中 select() 可以处理的最大套接字数是多少?
限制 ASP.NET 4.5 中 WebSocket 的性能因素?