Асинхронные / параллельные HTTP-запросы с использованием PHP curl_multi - PullRequest
1 голос
/ 12 февраля 2010

Недавно я рассматривал возможность создания нескольких запросов с помощью curl. Возможно, я не совсем понимаю это, поэтому я просто надеюсь прояснить некоторые понятия.

Это определенно хороший вариант, если вы выбираете контент из нескольких источников. Таким образом, вы можете начать обработку результатов с более быстрых серверов, ожидая более медленных. Имеет ли смысл использовать его, если вы запрашиваете несколько страниц с одного сервера? Будет ли сервер обслуживать несколько страниц одновременно для одного и того же клиента?

Ответы [ 4 ]

3 голосов
/ 13 февраля 2010

Вы не можете выполнять многопоточность в PHP, поэтому вы не сможете начать обработку одной страницы, пока остальные еще находятся в процессе извлечения. Multi-curl не вернет управление, пока не будут получены все страницы или не истечет время ожидания. Таким образом, для извлечения самой медленной страницы потребуется столько времени, сколько потребуется. Вы переходите от последовательного (curl) к параллельному (multi_curl), что все равно даст вам большой импульс.

Серверы будут обслуживать несколько страниц для одного и того же клиента до определенного предела конфигурации. Было бы неплохо запросить 5-10 страниц с сервера.

1 голос
/ 11 декабря 2011

Проверьте это , этот парень создал скрипт, который работает асинхронно с curl_multi. Я играл с ним пару часов, и он отлично работает.

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

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

Несмотря ни на что, будьте внимательны, как бы вы хотели, чтобы веб-сканер рассматривался на вашем сайте, и старайтесь не бомбардировать один сервер слишком большим количеством сразу.

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

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

думаю, что большинство или все серверы будут одновременно обслуживать более одной страницы для одного и того же клиента. Вы можете установить разумное время ожидания для ваших соединений, а затем, если не удается установить соединение, вставьте его в массив соединений, чтобы повторить попытку после того, как все остальные были пройдены. Таким образом, вы будете получать по крайней мере по одному за раз, хотя он всегда будет пытаться получить несколько. Имеет ли это смысл? :)

...