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


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

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

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

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

Author: user1853777, 2013-12-23

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

 7
Author: Madhur, 2014-02-12 09:28:02