gpt4 book ai didi

perl - Perl SFTP真的真的很慢

转载 作者:行者123 更新时间:2023-12-02 14:22:35 25 4
gpt4 key购买 nike

我正在使用perl Net:SSH2库执行SFTP。它工作得很好,但是 super 慢。它开始的速度比链接速度(我可以处理的速度)慢7倍,但是几乎在传输2MB数据后就下降了1000倍。这是我的代码的简化版本。我使用此Linux命令创建了一个10M的随机数据dd if=/dev/urandom of=10M.dat bs=1M count=10文件。对于任何想要运行代码的人,请输入服务器,用户,密码等详细信息。

#!/usr/bin/perl

use strict;
use warnings;
use Fcntl ('O_WRONLY', 'O_CREAT');
use Net::SSH2;
use Time::HiRes qw(gettimeofday);

my $server = 'myserver';
my $username = 'myusername';
my $password = 'mypassword';
my $remoteFile = 'delme.dat';
my $localFile = '10M.dat';

my $ssh = Net::SSH2->new();
$ssh->connect($server) or die('Failed to connect to remote server for sftp');
$ssh->auth_password($username, $password);
$ssh->auth_ok() or die('Invalid username or password');
my $sftp = $ssh->sftp() or die('Ahhh!!');
open(my $localHandle, '<', $localFile) or die($!);
my $remoteHandle = $sftp->open($remoteFile, O_WRONLY | O_CREAT) or die($sftp->error());
my $tran = 0;
my $t = gettimeofday();
while(my $line = <$localHandle>)
{
print $remoteHandle $line;
$tran += length($line);
my $newTime = gettimeofday();
if($newTime - $t > 1)
{
print 'Speed is ' . ($tran / ($newTime - $t)) . "B/sec\n";
$t = $newTime;
$tran = 0;
}
}
close($remoteHandle);
close($localHandle);

最佳答案

Net::SSH2 / libssh2中对SFTP的支持不是最理想的。

请改用Net::SFTP::Foreign(如果在Windows上,请使用Net::SSH2后端Net::SFTP::Foreign::Backend::Net_SSH2)。

关于perl - Perl SFTP真的真的很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24445520/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com