![]() |
PHP. Параллельные запросы
Исходные данные: VPS с 10-12 ядрами.
PHP код:
Задача. Нужно все 10 file_get_contents выполнить одновременно, сократив время в 10 раз. Вопрос. Как? |
Ищите по запросу "multicurl".
|
Попробовал:
curl_multi_init(); curl_multi_exec(); curl_multi_close(); Время:1,68 сек. Прогресс есть, но всего в 2 раза быстрее. Маловато. добавлено через 29 минут Первый раз был удачней. Сейчас стабильно 2 секунды. |
Ненулевая вероятность, что это время параллельного отклика. На ваши запросы должен сформироваться ответ, идущий, к тому-же через защищенное соединение.
Можете вместо curl_multi сделать pcntl_fork несколько раз, получите параллельное исполнение в виде нескольких процессов. |
Шуранов, а как будет через pcntl_fork выглядеть вот этот пример:
PHP код:
Помогите пожалуйста. |
Попробуй неблокирующие сокеты. В сети есть примеры.
|
Направление, - это хорошо. Но лучше бы рабочий пример по условию темы.
|
Мне когда такое понадобилось - просто сделал дополнительный скрипт-запускалку параллельных процессов. Вот такой примерно:
PHP код:
Он за доли секунды запускает сколько указать в цикле параллельных процессов. |
А $host ?
Полученные данные как сохранить? PHP код:
|
Цитата:
А на счет сохранить - как вам надо так и сохраняете. Вариантов масса. Например, каждый поток может сохранять в свой файл. Чтобы названия файлов отличались можно вызывать эти потоки пронумеровано, например так: PHP код:
|
Здесь я результат запроса сохраняю в переменную.
Цитата:
:confused: добавлено через 39 минут Мне нужно получить данные с https: $host='адрес сайта без $path='чпу' $headers="GET $path HTTPS/1.1\r\n"; - добавляю S $content=$sock; результат пустой ответ добавлено через 50 минут PHP код:
В указанном примере пропусти S в HTTP , - у меня в примере S стоит добавлено через 54 минуты так тоже ответ пустой PHP код:
|
Port_Artur, судя по последним вопросам, вы совсем не поняли мою идею, как создавать параллельные запросы :(
Предложенный мной скрипт не качает информацию из сети, это делает ваш скрипт. А мой скрипт просто запускает N-ое раз ваш скрипт и эти N запушенных ваших скриптов параллельно качают, что вам надо. |
Теперь-то я понял. Думаю вот, как мне это реализовать, чтобы результаты потом использовать в скрипте.
добавлено через 6 минут Дело в том, что время критично, - поэтому лишние траты на запись в файл, потом его чтение, могут невилировать выигрыш по времени. добавлено через 2 часа 28 минут Максимальное время одного запроса 0,46 секунды, вот если бы сократить хотя бы до 0,5-0,6 сек. Было бы супер! |
Так в файлы пишутся результаты, а запросы то вы быстро отправите и получите. Плюс vps на SSD дисках пошустрее будут. Плюс еще можно ваш скрипт пробовать ускорить. Например, когда CURL хочет открыть какую-то страницу, он предварительно обращается к DNS чтобы узнать ip. А вы можете этот ip заранее определить, вбить в настройки соединения и в итоге без обращения к DNS получится чуть быстрее.
Еще в ваш скрипт можно попробовать всунуть функцию времени ожидания: например потоки запускаем заранее (за минуту или несколько секунд до часа Х), далее они просто ждут уже активированные в памяти сервера, а в нужную миллисекунду фигачат. Так вообще сверхскорость можно получить. Можно и другие способы ускорения придумать. |
Десятки посетителей сайтов одновременно, страниц сотни таких запросов в 10 раз больше. Не понимаю как хранить столько файлов, под каким именем, как разбирать потом нужные?
|
Я вообще думал вы домены с такой скоростью хотите перехватывать :) А файлы я в качестве примера привел. Но если вам файлы не нравятся - используйте базу данных.
|
Цитата:
|
Цитата:
речь об общем времени |
Цитата:
|
| Текущее время: 01:58. Часовой пояс GMT +4. |
Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Техническая поддержка — DevArt.PRO. Перевод: zCarot.