Простая реализация нотификаций из сервера в браузер?
Допустим, я делаю чат.
Нужно уведомлять клиентов о возникновении некоторых событий.
Основной сайт написан на PHP, и именно в этой части появляются события.
Самый простой способ, который я вижу, это:
1) На Node.js (socket.io) написать сервер (и поставить его бекендом за nginx), который будет связан с браузером с по WebSocket.
2) При появлении события в PHP-части проекта отправляем сообщение в rabbitmq.
3) При наличии сообщения в rabbitmq отправляем его Node.js демоном нужным клиентам в браузеры.
4) Мониторинг Node.js сервера возложить на supervisor.
Мне не нравится зоопарк технологий для данной задачи.
Как можно попроще?
А что именно в наборе технологий смущает? Ну как вариант можно node.js заменить на Ratchet, -1 ЯП в списке будет.
Так по сути не убавить, не прибавить.
Смущает, что зоопарк. Вариант с Ratchet мне нравится, но не нравится, что Ratchet предлагает мне ZeroMQ использовать вместо того брокера, который я уже выбрал и с которым привык работать.
Однажды у меня была аналогичная задача, к PHP сайту написать чат. Использовал для это Ratchet.
Возможно rabitmq можно заменить на beanstalkd или gearman и тогда у вас остаётся всего два языка, PHP и C :)
Ну мне безразлично, на каком языке все написано, если я не буду в код лезть :) Мне не нравится, что Ratchet предлагает мне ZeroMQ использовать вместо того брокера, который я уже выбрал и с котороым привык работать.
проще - лонгполинг.
на клиенте с помощью аякса посылаете запрос на сервер. Ставите таймаут 1 минуту. На сервере делаете цикл, который возвращает значение, если есть изменения + sleep(1) в итерации. Ну настраиваете по времени - так как удобно. в случае изменений - отправляете данные - аякс принимает и уведомляет.
Это очень грязное решение, постоянно придется запрашивать данные и держать количество процессов по числу пользователей. Первое лечится очередями, второе отдельным сервером, в итоге приходим как раз к тому варианту, который описал я.
Для меня проще всего было использовать server sent events
Для веб сокетов, в принципе, не обязательно node js, php скрипт тоже можно заставить быть демоном.
А общение между демоном и сайтом проще, да, через rabbitmq.
IncorrecTSW: нельзя, приложение на PHP уже разработано, и использует инструменты, аналогов которых не существует в экосистемах Node.js или Go. В частности, Symfony фреймворк.