【问题标题】:Why does NET::FTP upload files so slowly为什么 NET::FTP 上传文件这么慢
【发布时间】:2014-09-12 12:55:00
【问题描述】:

我的问题是关于使用 perl 将本地文件 ftp 到 ftp 服务器。问题是为什么上传速度这么慢。这是代码:

use strict;
use warning;

use NET::FTP;

my $ftpserver = "10.110.143.9";
my $usr       = "John";
my $passwd    = "John";

sub main {
    my $ftp = Net::FTP->new( $ftpserver, Timeout => 200 ) or print "Can't connect ftpserver" sleep 5;
    my $rc = $ftp->login( $usr, $passwd );
    unless ($rc) {
        print("login failed!");
        return 1;
    }
    print("login success");
    $ftp->binary();
    $ftp->put("d:\\2012.txt");
    $ftp->quit;
    return 0;
}

30mb 的上传时间约为 5 分钟,而在同一台机器上使用另一个 ftp 客户端只需 10 秒左右。

【问题讨论】:

  • 使用其他 FTP 客户端上传相同文件的速度有多快?与您的 FTP 服务器的连接是否真的那么糟糕?
  • 例如,文件大约30MB,使用我的程序上传到服务器大约需要5分钟,而使用另一种上传方式大约需要10秒。
  • ftp有两种模式;通常,如果您的 ftp 客户端位于不是 10.x.x.x 或 192.168.x.x 的可公开寻址 IP 地址上,您将能够使用主动模式。如果不是,您将需要使用被动模式。

标签: perl ftp


【解决方案1】:

您应该启用PassiveMode,并使用BlockSize(它曾经是Net::FTP 减速的来源),如下所示:

my $ftp = new Net::FTP(
    $ftpserver,
    Timeout => 200,
    Passive => 1,
    BlockSize => 8192,
);

尝试将BlockSize 增加(或减少)2 倍,看看是否有任何变化。

【讨论】:

  • 谢谢,我试过增加BlockSize,当BlockSize大的时候上传速度会比以前快。
  • 很高兴它对您有所帮助。但我同意Net::FTP 的质量总体上有点问题 - 它应该能够在没有任何调整的情况下使您的连接饱和,就像大多数其他 FTP 客户端可以做的那样。
猜你喜欢
  • 1970-01-01
  • 2012-12-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多