我的任务是编写一个客户端数据下载系统(在Linux上),该系统使用FTP或HTTP将来自外部合作伙伴的TB级数据下载到我们的本地站点。我们公司的网络管理员告诉我,我不能超过一定的带宽。我实施这样一个系统的最佳方式是什么?现有的库是否存在?
我愿意编写自己的FTP和HTTP客户端(在Linux上使用C或Java)但更愿意不在内核中。我知道我可以限制我的FTP / HTTP客户端调用套接字read()的速率,但如果服务器端调用write()的速度超过我的限制会怎么样?
答案 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?