является ли redis pub/sub реалистичным в php?
Я хотел бы использовать redis pub/sub в PHP, но, боюсь, PHP не может быть единственным инструментом: подписчик должен быть всегда доступен для вызова, поскольку php не создан для работы в качестве демона, я не могу доверять ему, чтобы он всегда был "включен". Итак, каково решение для мира PHP:
- не используйте pub/sub, используйте другие хранилища redis с crontask, запускающей php каждые x минут
- использовать брокера, который будет вызывать php?
- другое?
С "2". Я имею в виду: используйте nodejs/сервер java/foobar, который является демонизированным подписчиком, и перезванивает php (используя http/cli или что-то еще).
Я не могу найти лучшей идеи, чем "2.", но в то же время это кажется таким неэффективным...
Каково ваше мнение?
РЕДАКТИРОВАТЬ : Как бы вы это сделали, используя облачную платформу, такую как platform.sh которые не дают возможности иметь руководителя.d так же?
1 answers
Благодаря комментариям я нашел удовлетворительный способ: использовать supervisor.d, который перезапустит командный скрипт symfony с помощью:
set_time_limit(0)
- бесконечный цикл
- блокирующий вызов redis (a
BRPOP
с максимальной продолжительностью 1 сек. ниже, чем значение read_write_timeout)- важно выполнить команду блокировки, чтобы не потреблять все процессорное время
- Я бы даже пошел в настоящий паб/саб, но сейчас у меня только один слушатель, так что это не материя
Что я могу сказать с ранней точки зрения:
- супервизор.d действительно прост в установке/настройке, документ завершен, у меня не возникло никаких проблем, это очень редко + удовлетворительно!
- кажется, это хорошо работает
- журналы записываются, поэтому может быть проще понять будущие сбои
- в случае X последовательных и близких сбоев служба останавливается, я не нашел способа получить уведомление об этом, это действительно проблема, я думаю, что я буду перейдите к этому решению( док)
- как сказал @Майк Миллер: " Единственное, что нужно помнить о том, что вы идете этим путем, - это то, что вам нужно перезапустить после изменения кода, иначе он продолжит выполнять ваш старый код"