Добавление Node.js(для уведомлений в режиме реального времени) к существующему PHP-приложению
У меня есть существующее PHP-приложение, которому нужно добавить уведомления в реальном времени. Для этого я установил node.js(намереваясь добавить socket.io для всех функций реального времени)
Однако. Несмотря на то, что последние три часа проводили исследования и пытались понять, как интегрировать эти два, я не нашел ничего ближе к пониманию.
В настоящее время я использую следующее:
- Apache
- PHP
- Nginx (в качестве обратного прокси-сервера для Apache для всего статического контента, такого как
images/css файлы и т.д.)
- MySQL
У меня уже написан код, который отправляет событие от клиента на PHP и вставляет уведомление в базу данных. Когда получатель обновляет свою страницу, они, конечно, видят уведомление. Мне просто нужно node.js обрабатывать нажатие в реальном времени клиента, но я не понимаю, как это сделать.
Мне действительно нужно знать, учитывая этот сценарий, следующее:
- Как/когда соединение node.js/websocket с клиентом, созданным экземпляром
что я хочу, чтобы весь контент все еще служил через Apache/PHP?
- Как я могу отправить сообщение с PHP на node.js и просить его нажать
уведомление клиенту?
- Какие изменения в конце концов мне нужно внести в мою настройку, чтобы поддержать это?
В конечном счете, я хотел бы просто запустить функцию PHP и ожидать, что node.js/socket.io/websockets направит уведомление клиенту. Я просто не знаю, как туда добраться.
Заранее благодарим за любые примеры/информацию/руководства.
Ответы
Ответ 1
В этом случае я создам сервер Node.js с Socket.IO. Это дает вам кросс-браузерный метод для отправки данных в режиме реального времени клиентам.
Когда клиент загружает вашу страницу PHP, у вас будет тэг <script>
, указывающий на ваш сервер Node.js для загрузки Socket.IO. После загрузки клиент Socket.IO JavaScript подключится к вашему серверу Node.js Socket.IO и дождитесь появления событий.
Теперь, поскольку вы хотите, чтобы эти события отправлялись с PHP, вам нужен канал связи между вашим PHP-приложением и Node.js. Я рекомендую использовать Redis pub/sub для этого. В основном, ваше приложение PHP публикует сообщение, и ваши серверы Node.js, подписавшиеся на него, получат его. Затем эти серверы могут сразу передать сообщение клиенту, чтобы получить больше данных с PHP. (Я думаю, вы обнаружите, что было бы просто, чтобы ваш сервер Node.js просто отправлял эти данные в первую очередь.)
Вы можете поместить Node.js за свой сервер Nginx, если хотите, но вам нужна последняя и самая лучшая версия для поддержки настоящих веб-сокетов.