如何为FTP / HTTP实现客户端带宽限制?

时间:2013-05-30 20:38:28

标签: java sockets network-programming bandwidth

我的任务是编写一个客户端数据下载系统(在Linux上),该系统使用FTP或HTTP将来自外部合作伙伴的TB级数据下载到我们的本地站点。我们公司的网络管理员告诉我,我不能超过一定的带宽。我实施这样一个系统的最佳方式是什么?现有的库是否存在?

我愿意编写自己的FTP和HTTP客户端(在Linux上使用C或Java)但更愿意不在内核中。我知道我可以限制我的FTP / HTTP客户端调用套接字read()的速率,但如果服务器端调用write()的速度超过我的限制会怎么样?

5 个答案:

答案 0 :(得分:1)

您可以在InputStream之上构建另一个图层:在read方法中,您可以计算到目前为止的字节数。如果字节数/秒超过某个限制,请让下载线程休眠一段时间。 TCP的流量控制完成剩下的工作。

答案 1 :(得分:0)

我知道Apache JMeter模拟慢速连接。您可以查看the code

答案 2 :(得分:0)

如果您知道网络路径延迟,则可以将TCP接收缓冲区大小设置为所需的带宽延迟产品。这将扼杀发件人的权利。但是,对于您的平台,结果值可能太小,因此可能会向上调整它。设置后检查值。

您的netadmin是否知道TCP会自动共享带宽?

答案 3 :(得分:0)

您是否可以使用现成的GUI或命令行产品? Filezillia提供了这个。 还有一个名为lftp的linux命令行客户端。可设置的参数是net:limit-total-rate,它将限制传输速率。由于此客户端一次支持多次传输,因此它还具有参数net:limit-rate。

答案 4 :(得分:0)

为了简单起见,如果你在Linux上,你可以使用wget而不是重新发明轮子?看看--limit-rate开关。

但回到主题:)这个答案可以帮助你开始:How can I implement a download rate limited in Java?