@Octoberfest

Как можно организовать такую очередь на shared хостинге?

Здравствуйте. На тостере много вопросов про очереди, но как быть на shared хостингах.

Проблема - может прийти порядка 50 запросов в течение 5 секунд, обработать и отправить в другое место через API я их могу не чаще 1 запроса в секунду, что очень плохо.

Как хочу решить проблему, но не уверен:
1) пришел запрос, смотрю в базе (таблица с 1 строкой (0/1) ведется работа сейчас или нет, если ведется то делаю serialize/json_encode и пишу в базу (другая таблица, очередь запросов)
2) Как только обработка запроса закончилась, (сейчас вот не знаю как реализовать) как-то в деструкторе класса или через do while смотрю, есть ли ещё в базе запросы которые ожидают обработку и тяну их обрабатывать сразу же после окончания обработки. Это очень важно, не хочу никакие кроны принципиально.

Что скажете, то что это костыльно - да, но приемлем ли данный способ к реализации или можно сделать проще?

Про gearman, rabbitmq и пр. знаю, но увы, шаред хостинг.
  • Вопрос задан
  • 137 просмотров
Пригласить эксперта
Ответы на вопрос 2
@4iloveg
Full-Stack HTML Developer
Ограничение в 1 сек именно из за api?
Ответ написан
@entermix
Это очень важно, не хочу никакие кроны принципиально.

Чем крон не устроил то?

Пишем все задачи в таблицу, крон запускает скрипт, который проверяет наличие невыполненных задач и выполняет их по очереди.

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

Блокировка доступа:
if (!flock($fh = fopen(__FILE__, 'r'), LOCK_EX | LOCK_NB)) die('Script is already running!');
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы