我的应用程序需要有一个文件上传组件,用于上传非常大(>1gb)的文件。我尚未决定使用哪种协议(HTTP 或 FTP)(任何这方面的帮助都将不胜感激)。现在,当一个用户使用此上传功能时,其他用户的工作不应受到阻碍,即一个大文件上传不应占用其他用户的带宽。
有没有办法在网络上限制此上传过程,以便我只能为其分配一定数量的带宽,从而继续上传过程,而其他用户的工作也不会受到阻碍?从网络的角度来看,这种大型文件上传的最佳协议是什么(HTTP 或 FTP)?FTP 和 SFTP 是同一件事吗?还是 SFTP 的开销更大,因此数据传输速率更慢?
答案1
如果不考虑安全性,那么最好使用 ftp 而不是 sftp,以避免加密开销。对于 1 GB 大小的文件,我认为您不必担心有人嗅探,因为用户通常不会嗅探这么大的文件。所以 ftp 没问题。
答案2
如果您需要限制自己的应用程序,那么我建议您在应用程序本身中包含数据速率限制支持,但如果您使用第三方库来执行发送,这可能是不可能的。
你没有说明你的平台和预期的安装环境,这使得具体建议变得困难,但是 libcurl (http://curl.haxx.se/) 通常是一种流行的选择,它支持几乎所有直接点对点传输协议,具有速率限制选项,并且适用于大多数平台,包括 Linux、BSD、MacOS 和 Windows。该许可证还允许将其链接到非 F/OSS 应用程序中,如果这对您来说是一个问题,并且如果您找不到所选语言的直接绑定,您可以随时通过外部curl
实用程序调用它。
如果你被困在使用不支持速率限制的库或外部程序,并且你正在使用 Linux(或其他类似 unix 的环境),那么你可以研究一下 trickle(看这里)或现代内核内置的流量整形(目前有很多这方面的指南,这是经过 Google 快速搜索后排在首位的那个。使用这样的流量整形可以让你控制整个传出带宽,而不仅仅是一个应用程序,因此你可以阻止任何流(或流组合)消耗你网络的所有上行带宽,而无需更改单个应用程序。
答案3
如果您使用的应用程序支持此功能,您可以在应用程序级别限制带宽。例如,curl 带有您可以指定的 --limit-rate 选项。
您可以使用服务质量 (QoS) 来限制网络本身的带宽。这有点复杂 - 一个很好的介绍是这里。