2010-02-12 5 views
1

Недавно я рассмотрел возможность создания нескольких запросов с помощью curl. Возможно, я не понимаю его полностью, поэтому я просто надеюсь уточнить некоторые концепции.Асинхронные/параллельные HTTP-запросы с использованием PHP curl_multi

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

ответ

4

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

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

0

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

0

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

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

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

1

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