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 для добавления функций чата в реальном времени на ваш сайт.