NodeJS с приложением PHP и пользовательской сессией
У меня есть приложение PHP (с Symfony2), и мне нужно, чтобы мои пользователи говорили и другие вещи в режиме реального времени (с socket.IO). Давайте сосредоточимся на механизме чата: зарегистрированный пользователь может общаться с другим зарегистрированным пользователем (зарегистрированным с помощью FOSUserBundle в Symfony). Когда пользователь отправляет сообщение, оно должно быть сохранено в MySQL и отправлено в режиме реального времени другому пользователю. Таким образом, сообщение связано с двумя пользователями (отправителем и получателем) в моей базе данных MySQL.
Так что у меня есть две возможности :
- Я использую PHP для хранения сообщений :
- У меня есть событие при нажатии кнопки "отправить" и вызове PHP-URL с помощью AJAX
- Если мой PHP вернет "ОК" (значит, он правильно добавил сообщение в базу данных), я выдам сокет.Событие ввода-вывода -> пусть доктрина разбирается с данными и символикой с моим пользователем
- На стороне NodeJS у меня есть слушатель этого события, и я отправил сообщение через сокет.Ввод-вывод с другим событием
- Я использую только NodeJS :
- Как я могу зарегистрировать своего пользователя на PHP и Сторона NodeJS?
- Мне нужно использовать другую базу данных для данных в реальном времени?
- Как я могу разделить своих пользователей между NodeJS и PHP?
Я не знаю, какое самое чистое решение, если кто-нибудь может мне помочь. Спасибо!
1 answers
Это можно сделать с помощью общего хранилища данных, такого как 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 код.
Веб-сайты
Если вы используете nodejs только для части WebSockets, я бы посоветовал этого не делать, потому что тогда вам также придется копировать логику аутентификации пользователя в nodejs
Вместо этого вы можете создавать веб-сайты на PHP, используя некоторую библиотеку, такую как http://socketo.me/
Что касается хранения сообщений в MySQL, то
Ваш первый подход к выполнению вызова AJAX для сохранения сообщения в базе данных, ожидая ответ, а затем отправка события SocketIO приведет к вялой работе в чате. Я бы посоветовал вам хранить сообщения в MySQL через NodeJS (асинхронно)
При проверке примечания https://github.com/kyle-dorman/ChitChat.js для добавления функций чата в реальном времени на ваш веб-сайт.