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

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

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

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

Источник:

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);

3

Решение

При использовании протокола SFTP клиент (клиентская библиотека) несколько раз использует запрос READ для получения фрагментов содержимого файла.

Тупая реализация, которую использует phpseclib, отправляет один запрос «READ» (до 32 КБ), ожидает ответа «DATA», отправляет другой запрос «READ», ожидает и так далее, пока не получит целый файл.

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

Умные клиенты (библиотеки) преодолевают это, отправляя несколько запросов «READ», не ожидая ответа, или используя большой запрос «READ», или оба.

Например, FileZilla отправляет последовательность запросов «READ» объемом 32 КБ для данных объемом до 1 МБ.

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

Все, что вы можете сделать, это увеличить размер запроса «READ», используя Net_SFTP::max_sftp_packet,

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]