Я, кажется, сбой моего сайта, запрашивая слишком много соединений одновременно (600 ~),
Я хотел бы уменьшить это до, возможно, 3-4 соединения, спать до освобождения, а затем добавить больше по мере необходимости.
Код, который я думал об использовании …
// execute the handles
$running = null;
do
{
if ($running <= 4) curl_multi_exec($mh, $running); //add handle
usleep(100); //sleep
} while($running > 0);
Я не думаю, что это правильный / вменяемый способ сделать это, хотя, может кто-нибудь порекомендовать лучший способ, пожалуйста?
Существует опция для ограничения количества соединений в PHP> = 5.5 с помощью curl_multi_setopt
и CURLMOPT_MAXCONNECTS
вариант.
http://php.net/manual/en/function.curl-multi-setopt.php
CURLMOPT_MAXCONNECTS
Передайте число, которое будет использоваться как максимальное количество одновременно открытых соединений, которые libcurl может кешировать. По умолчанию 10. Когда кэш заполнен, curl закрывает самый старый в кэше, чтобы предотвратить увеличение количества открытых соединений.
например.:
curl_multi_setopt ( $mh , CURLMOPT_MAXCONNECTS, 4);
Предостережения — сообщается о проблемах со стабильностью в CentOS, и требуется PHP 5.5 или выше.
То, как вы это делаете, в принципе разумно … но может очень легко застрять в бесконечном цикле.
Понятно, что $running
обновляется только когда curl_multi_exec($mh, $running)
вызывается, потому что $ running передается в качестве ссылочной переменной в curl_multi_exec;
Попробуйте эти бесплатные библиотеки, которые достигают того, что вы хотите сделать в удобном для проглатывания формате.
Оба из них хорошо протестированы и имеют максимальные возможности подключения.
Других решений пока нет …