NodeJS与PHP应用程序和用户会话

时间:2013-12-23 07:53:26

标签: php node.js session symfony socket.io

我有一个PHP应用程序(使用Symfony2),我需要让我的用户实时交谈(和socket.IO)。 让我们关注聊天机制:已登录的用户可以与其他已登录用户交谈(使用Symfony中的FOSUserBundle进行登录)。当用户发送消息时,它必须保存在MySQL中并实时发送给其他用户。因此,消息链接到MySQL数据库中的两个用户(发送者和接收者)。

所以我有两种可能性:

  • 我使用PHP来存储消息:
    • 点击“提交”时有一个事件,并使用AJAX调用PHP网址
    • 如果我的PHP返回“OK”(所以他正确地在数据库中添加了消息),我发出一个Socket.IO事件 - >让doctrine与我的用户处理数据和symfony
    • 在NodeJS方面,我有一个关于此事件的监听器,我通过Socket.IO发送了带有其他事件的消息
  • 我只使用NodeJS:
    • 如何在PHP和NodeJS端登录我的用户?
    • 我需要实时使用不同的数据库进行数据处理吗?
    • 如何在NodeJS和PHP之间共享我的用户?

如果有人可以帮助我,我不知道什么是最干净的解决方案。 谢谢!

1 个答案:

答案 0 :(得分:7)

可以使用像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

如果您对WebSockets部分使用nodejs 只是,我建议不要,因为那时您还必须在nodejs中复制您的用户身份验证逻辑

您可以使用某些库(如http://socketo.me/

)在PHP中执行WebSockets

在MySQL中存储消息

进行AJAX调用以将消息存储在数据库中,等待响应然后发出SocketIO事件的第一种方法将导致缓慢的聊天体验。 我建议你通过NodeJS(异步)将消息存储到MySQL

在旁边,请检查https://github.com/kyle-dorman/ChitChat.js,以便为您的网站添加实时聊天功能。