NodeJS с приложением PHP и сеансом пользователя

У меня есть приложение PHP (с Symfony2), и я должен разрешить моим пользователям говорить и другие мелодии в режиме реального времени (с socket.IO). Позвольте сосредоточиться на механизме чата: Зарегистрированный пользователь может разговаривать с другим зарегистрированным пользователем (зарегистрированным в FOSUserBundle в Symfony). Когда пользователь отправляет сообщение, он должен быть сохранен в MySQL и отправлен в реальном времени другому пользователю. Таким образом, сообщение связано с двумя пользователями (отправителем и получателем) в моей базе данных MySQL.

Итак, у меня есть две возможности:

  • Я использую PHP для хранения сообщений:
    • У меня есть событие на клике "отправить" и вызывать PHP-адрес с помощью AJAX
    • Если мой PHP вернется "ОК" (поэтому он правильно добавил сообщение в базу данных), я испускаю событие Socket.IO → пусть доктрина обрабатывает данные и symfony с моим пользователем.
    • На стороне NodeJS у меня есть слушатель этого события, и я отправил сообщение через Socket.IO с другим событием
  • Я использую только NodeJS:
    • Как я могу зарегистрировать моего пользователя на стороне PHP и NodeJS?
    • Мне нужно использовать другую базу данных для данных в реальном времени?
    • Как я могу делиться своими пользователями между NodeJS и PHP?

Я не знаю, что является самым чистым решением, если кто-то может мне помочь. Спасибо!

Ответ 1

Может быть сделано с использованием общего хранилища данных, например redis для хранения пользовательских сеансов

Проверьте эту ссылку для справки

http://simplapi.wordpress.com/2012/04/13/php-and-node-js-session-share-redi/

Также проверьте

http://www.slideshare.net/leeboynton/integrating-nodejs-with-php-march-2013-1

Что дает вам обзор того, как сеансы могут использоваться совместно с общим хранилищем данных в памяти и некоторым примером memcached-кода.

WebSockets

Если вы используете nodejs просто для части WebSockets, я бы предложил не делать этого, потому что тогда вам придется реплицировать логику аутентификации пользователя в nodejs, а также

Вместо этого вы можете использовать WebSockets в PHP, используя некоторую библиотеку, например http://socketo.me/

Что касается сохранения сообщений в MySQL, то

Ваш первый подход сделать вызов AJAX для хранения сообщения в базе данных, ожидая ответа и затем испускающего событие SocketIO, приведет к вялому чату. Я предлагаю вам хранить сообщения в MySQL через NodeJS (асинхронно)

На боковой отметке отметьте https://github.com/kyle-dorman/ChitChat.js для добавления функций чата в реальном времени на ваш сайт.