Подтвердить что ты не робот

Добавление 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 направит уведомление клиенту. Я просто не знаю, как туда добраться.

Заранее благодарим за любые примеры/информацию/руководства.

4b9b3361

Ответ 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, если хотите, но вам нужна последняя и самая лучшая версия для поддержки настоящих веб-сокетов.