2014-01-25 5 views
0

Мне нужно сканировать веб-сайт со скоростью, скажем, 8 страниц в минуту. Теперь я хочу, чтобы запросы, которые я делаю на удаленный сервер, были равномерно распределены в течение минуты, не вредит серверу, на который он запрашивает.Сканирование сайта по единой ставке

Как я могу поддерживать единообразную разницу во времени между секундами между двумя последовательными запросами? Каков наилучший способ сделать это?

+0

Разве нет способа установить какую-либо задержку в PHP? – Oleg

+0

@ Олег, его там. Но, полагаю, использование задержки не очень хорошо. Ненужно потребляет ресурсы. Я не думаю, что это масштабируемая вещь. –

+0

Вы упомянули, что у вас есть ограничения по верхнему пределу (8 раз в минуту), но у вас также есть ограничения по нижним границам (например, минимальное количество раз в минуту)? Если нет, вы можете просто использовать версию вашего сна программирования() каждые 60/8 секунд ..? –

ответ

1

Здесь действительно два отдельных вопроса. Давайте решать их по отдельности:

ПЕРВЫЙ ВОПРОС

мне нужно сканировать сайт со скоростью, позволяет сказать, 8 страниц в минуту .... так что это не вредит сервер является с просьбой.

Парафраз: я хочу, чтобы не отправлять более 8 запросов в минуту, потому что я хочу быть приятным на удаленном сервере.

Для этого ответа существует related Stack Overflow question относительно ограничения скорости с использованием PHP и Curl.

ВТОРОЙ ВОПРОС

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

Парафраз: Я хочу иметь такое же количество времени между каждым запросом.

Это другой вопрос, чем первый, и сложнее. Для этого вам нужно будет использовать часы для отслеживания до и после каждого запроса и постоянно усреднять время, затрачиваемое на запрос, и сколько сна вы запрашиваете, и/или как часто вы вызываете get(). Вы также должны будете учитывать, сколько времени занимает каждый запрос (что, если вы получаете крайне медленное соединение, которое снижает ваш средний показатель, так что вы делаете только 3 или 4 запроса в минуту ...)

Я лично не думайте, что это на самом деле то, что вам нужно сделать ", чтобы оно не повредило серверу".

Вот почему: Обычно лимиты ставок устанавливаются с помощью «верхней границы для наименьшего среза времени». Таким образом, это означает, что «8 запросов в минуту» означает, что все они могут появляться сразу в минуту, но не более 8 в минуту. Ограничитель скорости не ожидает, что они будут равномерно распределены в течение минуты. Если бы они этого захотели, они бы сказали «один запрос каждые пять секунд».

Смежные вопросы