является ли redis pub/sub реалистичным в php?


Я хотел бы использовать redis pub/sub в PHP, но, боюсь, PHP не может быть единственным инструментом: подписчик должен быть всегда доступен для вызова, поскольку php не создан для работы в качестве демона, я не могу доверять ему, чтобы он всегда был "включен". Итак, каково решение для мира PHP:

  1. не используйте pub/sub, используйте другие хранилища redis с crontask, запускающей php каждые x минут
  2. использовать брокера, который будет вызывать php?
  3. другое?

С "2". Я имею в виду: используйте nodejs/сервер java/foobar, который является демонизированным подписчиком, и перезванивает php (используя http/cli или что-то еще).

Я не могу найти лучшей идеи, чем "2.", но в то же время это кажется таким неэффективным...

Каково ваше мнение?


РЕДАКТИРОВАТЬ : Как бы вы это сделали, используя облачную платформу, такую как platform.sh которые не дают возможности иметь руководителя.d так же?

Author: Bruno, 2016-12-28

1 answers

Благодаря комментариям я нашел удовлетворительный способ: использовать supervisor.d, который перезапустит командный скрипт symfony с помощью:

  • set_time_limit(0)
  • бесконечный цикл
  • блокирующий вызов redis (a BRPOP с максимальной продолжительностью 1 сек. ниже, чем значение read_write_timeout)
    • важно выполнить команду блокировки, чтобы не потреблять все процессорное время
    • Я бы даже пошел в настоящий паб/саб, но сейчас у меня только один слушатель, так что это не материя

Что я могу сказать с ранней точки зрения:

  • супервизор.d действительно прост в установке/настройке, документ завершен, у меня не возникло никаких проблем, это очень редко + удовлетворительно!
  • кажется, это хорошо работает
  • журналы записываются, поэтому может быть проще понять будущие сбои
  • в случае X последовательных и близких сбоев служба останавливается, я не нашел способа получить уведомление об этом, это действительно проблема, я думаю, что я буду перейдите к этому решению( док)
  • как сказал @Майк Миллер: " Единственное, что нужно помнить о том, что вы идете этим путем, - это то, что вам нужно перезапустить после изменения кода, иначе он продолжит выполнять ваш старый код"
 1
Author: Bruno, 2017-04-13 12:13:41