1

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

我愿意编写自己的 FTP 和 HTTP 客户端(在 Linux 上使用 C 或 Java),但更愿意远离内核。我知道我可以限制我的 FTP/HTTP 客户端调用套接字 read() 的速率,但是如果服务器端调用 write() 的速度快于我的限制会发生什么?

4

5 回答 5

2

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

于 2013-05-30T21:48:44.290 回答
0

我知道 Apache JMeter 模拟慢速连接。你也许可以看看代码

于 2013-05-30T20:51:10.197 回答
0

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

您的网络管理员是否知道 TCP 会自动公平地共享带宽?

于 2013-05-30T23:15:31.710 回答
0

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

于 2013-09-23T19:47:29.433 回答
0

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

但回到主题:) 这个答案可以让你开始:如何在 Java 中实现下载速率限制?

于 2013-09-23T20:44:48.040 回答