我正在使用BSD套接字编写客户端服务器应用程序。它需要在后台运行,连续传输数据,但不能占用正常使用的网络接口(interface)带宽。根据接口(interface)的速度,我需要将该连接限制为某个最大传输速率。

以编程方式实现此目标的最佳方法是什么?

最佳答案

每次传输后休眠1秒钟的时间量不变的问题是您的网络性能会不稳定。

令BandwidthMaxThreshold为所需的带宽阈值。

令TransferRate为连接的当前传输速率。

然后...

如果检测到TransferRate> BandwidthMaxThreshold,则执行SleepTime = 1 + SleepTime * 1.02(将 sleep 时间增加2%)

在每次网络操作之前​​或之后进行
sleep 时间

如果您发现TransferRate远低于BandwidthMaxThreshold,则可以减少SleepTime。或者,您可以随时随时间衰减/减小SleepTime。最终,您的SleepTime将再次达到0。

除了增加2%之外,您还可以线性增加TransferRate-BandwidthMaxThreshold之间的差异。

这个解决方案很好,因为如果用户的网络已经没有您想要的那么高,您将不会沉睡。

09-06 10:43