Асинхронные / параллельные HTTP-запросы с использованием PHP curl_multi

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

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

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

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

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

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

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

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

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