Как ограничить количество одновременных соединений, используемых cURL - PullRequest
7 голосов
/ 10 февраля 2010

Я сделал простой веб-сканер, используя PHP (и cURL). Он анализирует примерно 60 000 HTML-страниц и получает информацию о продукте (это инструмент для внутренней сети).

Моя главная проблема - это одновременная связь. Я хотел бы ограничить количество подключений, поэтому, что бы ни случилось, сканер никогда не будет использовать более 15 одновременных подключений.

Сервер блокирует IP всякий раз, когда достигается ограничение в 25 одновременных подключений по IP, и по какой-то причине я не могу изменить это на стороне сервера, поэтому мне нужно найти способ заставить мой скрипт никогда не использовать больше, чем X одновременных подключений.

Возможно ли это?

Или, может быть, мне следует переписать все это на другом языке?

Спасибо, любая помощь приветствуется!

Ответы [ 3 ]

5 голосов
/ 10 февраля 2010

также вы можете использовать curl_set_opt(CURLOPT_MAXCONNECTS, 15); для ограничения количества соединений. Но вы также можете захотеть создать простой менеджер соединений, если он этого не сделает за вас.

0 голосов
/ 10 февраля 2010

Мой ответ на другой вопрос содержит код для этого с curl_multi _ *.

0 голосов
/ 10 февраля 2010

Может быть, написать простую таблицу соединений:

target_IP           |   active_connections

1.2.3.4                 10
4.5.6.7                 5

каждый вызов curL увеличивает количество соединений, каждое закрытие уменьшает его.

Вы можете сохранить таблицу в таблице MySQL или Memcache для скорости.

Когда вы сталкиваетесь с IP-адресом, у которого уже есть максимальное количество подключений, вам придется реализовать очередь «попробуйте позже».

...