Способы ускорения работы phpseclib sftp для загрузки удаленного файла


Поэтому я использую phpseclib, который загружает файл размером 50 МБ по sftp примерно за 45 секунд. Это быстро по сравнению с ssh2_scp_recv(), который занимает более 90 секунд, но медленно по сравнению с моим sftp-клиентом (filezilla), который занимает максимум 10 секунд.

Мой вопрос в том, что я могу сделать, чтобы ускорить загрузку файлов через sftp, кроме включения расширений mcrypt, gmp и bcmath, которые я уже сделал?

Я запускаю PHP 5.5 в Windows 7 и получил те же результаты при использовании cli или браузер/apache и с помощью sftp->получить, чтобы загрузить файл целиком или загрузить файл кусками разного размера.

Источник:

set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib');
require 'phpseclib/Net/SFTP.php';

$sftp = new Net_SFTP($host, $port, $timeout);
$sftp->login($user, $password);

$sftp->get($remoteFile, $localFile);
Author: Kevin Op den Kamp, 2015-01-08

1 answers

С протоколом SFTP клиент (клиентская библиотека) неоднократно использует запрос "ЧТЕНИЕ" для получения фрагментов содержимого файла.

Тупая реализация, которую использует phpseclib, отправляет один запрос "НА чтение" (до 32 Кб), ожидает ответа "ДАННЫЕ", отправляет другой запрос "НА чтение", ждет и так далее, пока не получит весь файл.

Если обратный путь к/с сервера занимает много времени (большая задержка), клиент (библиотека) может бесполезно ждать большую часть времени.

Интеллектуальные клиенты (библиотеки) преодолейте это, отправив несколько запросов "НА чтение", не дожидаясь ответа, или используя большой запрос "НА чтение", или и то, и другое.

FileZilla, например, отправляет последовательность запросов на "ЧТЕНИЕ" объемом 32 Кб для данных общим объемом до 1 МБ.

Phpseclib не поддерживает эту оптимизацию (обратите внимание, что она поддерживает загрузку).

Все, что вы можете сделать, это увеличить размер запроса "ЧТЕНИЕ", используя Net_SFTP::max_sftp_packet.

 3
Author: Martin Prikryl, 2018-05-10 04:00:09