Реализация многопоточности через CURL или что я делаю не так?
Добрый день, у меня достаточно философский вопрос и наверное нужен просто совет от Гуру.
Есть единая точка входа допустим mySite.com/index.php. На этот адрес идет множество запросов, причем скрипт который там написан может выполнятся несколько десятков секунд а может и несколько минут, грубо говоря, допустим стал обрабатываться один запрос, а все остальные которые приходят на этот адрес встают в очередь и пока первый не обработается следующие не станут обрабатываться (или я не прав, по логам смотрел вроде так работает)
Так вот было решено использовать Curl у которого в настройках стоит CURLOPT_TIMEOUT_MS =2000 который отправляет информацию на разные url (mySite.com/index_1; mySite.com/index_2 и тд.)логика работы вынесена в другие скрипты в зависимости от входящих параметров, что там будет дальше нам не особо важно и ответ нам не нужен, таким образом мы ждем только 2 секунды и тем самым освобождаем точку входа.
И вот вопрос как вы к такому подходу относитесь или дурак ли я) и что можно с этим сделать?
Правильно ли я понимаю, что вы хотите реализовать таким образом многопоточность внутри одного своего сайта? То есть все ваши курл-запросы будут обращаться к самому себе?
Если так, то лучше делать некоторую очередь и через крон обращаться к файлу-обработчику, который будет вытягивать запросы из очереди и отправлять их в нужный обработчик (index1.php, index2.php и т.д.).
Дело в том, что крон запустит другой экземпляр php на вашем сервере и таким образом вы сможете создать иллюзию многопоточности. Это будет намного лучше, чем долбиться через курл к самому себе как минимум по количеству выполненных действий и по количеству использованных ресурсов.
что там будет дальше нам не особо важно и ответ нам не нужен
В таком случае вам просто нужен фоновый обработчик очередей. При запросе кладёте задание в очередь и дальше оно там выполняется когда-нибудь.
Решение с curl - это решение на "авось". В любой момент умрёт, а вы об этом не узнаете. Да ещё и веб-сервер блокируется лишний раз.
Вот и с этим столкнулся что, что я отправил запрос курлом но обработчик вообще не сработал.
была идея делать через крон, то-есть при входящем запросе в точку входа делать запись в бд. а кроном долбить эту бд и вытаскивать записи не обработанных запросов. но я ограничен кроном максимум 1 секунда, не есть гуд. а с демонами я не очень знаком