Как можно организовать такую очередь на shared хостинге?
Здравствуйте. На тостере много вопросов про очереди, но как быть на shared хостингах.
Проблема - может прийти порядка 50 запросов в течение 5 секунд, обработать и отправить в другое место через API я их могу не чаще 1 запроса в секунду, что очень плохо.
Как хочу решить проблему, но не уверен:
1) пришел запрос, смотрю в базе (таблица с 1 строкой (0/1) ведется работа сейчас или нет, если ведется то делаю serialize/json_encode и пишу в базу (другая таблица, очередь запросов)
2) Как только обработка запроса закончилась, (сейчас вот не знаю как реализовать) как-то в деструкторе класса или через do while смотрю, есть ли ещё в базе запросы которые ожидают обработку и тяну их обрабатывать сразу же после окончания обработки. Это очень важно, не хочу никакие кроны принципиально.
Что скажете, то что это костыльно - да, но приемлем ли данный способ к реализации или можно сделать проще?
Про gearman, rabbitmq и пр. знаю, но увы, шаред хостинг.
Да, т.е. ко мне присылать могут пачками да как угодно, но я должен всё это аккуратно друг за другом по 1 запросу в секунду отправлять на сторонний сервис.
Это очень важно, не хочу никакие кроны принципиально.
Чем крон не устроил то?
Пишем все задачи в таблицу, крон запускает скрипт, который проверяет наличие невыполненных задач и выполняет их по очереди.
Чтобы задачи могли выполнятся быстрее, в скрипте обработчике можно запустить бесконечный цикл для проверки новых задач, заблокировать доступ к нему, а чтобы вдруг не отрубился, периодически проверять при помощи крона.
Блокировка доступа:
if (!flock($fh = fopen(__FILE__, 'r'), LOCK_EX | LOCK_NB)) die('Script is already running!');