curl在Linux上使用多个连接停止下载

时间:2015-03-22 09:44:12

标签: c++ linux curl download multiprocessing

我使用curl时遇到问题,从版本1.28.1到1.37.1 - 出现同样的问题: 在Linux环境中,使用命令行,我同时运行以下命令:

curl -o /dev/null "http://example.com/short_video.mp4" -o /dev/null "http://example.com/short_video.mp4" &
curl -o /dev/null "http://example.com/short_video.mp4" &
curl -o /dev/null "http://example.com/short_video.mp4" &
curl -o /dev/null "http://example.com/short_video.mp4" &

问题是 - 它开始成功下载,但通常,在高速互联网连接上,其中一个下载卡在零速度上,整个过程卡住了.. 唯一有用的是使用速度限制:

curl --speed-limit 5 -o /dev/null "http://example.com/short_video.mp4" &

然后它识别出速度很低并导致下载失败,但我想知道如何首先避免这种情况。

1 个答案:

答案 0 :(得分:0)

经过一个小小的研究,似乎有时只对任何一个连接感到高兴,(即使没有使用多个连接) 这似乎是TCP流量控制中的一个错误,因为:愚蠢的窗口综合症:  https://en.wikipedia.org/wiki/Silly_window_syndrome

引用:

  

滑动窗口操作时会出现严重问题   发送应用程序缓慢创建数据,接收   应用程序缓慢消耗数据,或两者兼而有之。如果服务器用   此问题无法处理所有传入的数据,它会请求   它的客户端减少了他们一次发送的数据量(窗口   设置TCP数据包)。如果服务器仍然无法执行   处理所有传入的数据,窗口变得越来越小,   有时甚至到传输的数据小于   数据包标头,使数据传输效率极低。

我注意到很长一段时间(2分钟或更长时间)后再开始下载。

相关问题