php - 带有 PHP 应用程序和用户 session 的 NodeJS

标签 php node.js session symfony socket.io

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

所以我有两种可能:

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

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

最佳答案

可以使用像 redis 这样的通用数据存储来存储用户 session

查看此链接以供引用

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 代码共享 session 。

WebSockets

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

您可以改为在 PHP 中使用 http://socketo.me/ 之类的库来执行 WebSockets

就在 MySQL 中存储消息而言

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

附注检查https://github.com/kyle-dorman/ChitChat.js用于向您的网站添加实时聊天功能。

关于php - 带有 PHP 应用程序和用户 session 的 NodeJS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20739221/

相关文章:

PHP 绑定(bind)参数() : Number of variables doesn't match number of parameters in prepared statement

php - mysql插入记录

php - 插入无值

java - 如何访问EJB的 'Session'?

java - 如何在邮件 session 中设置发送来源

php - 使用 php 快速列出 Amazon S3 存储桶中的所有文件的方法?

node.js - 在 Node.js 上使用 passport-ldapauth 进行 LDAP 身份验证

javascript - 类型错误 : Cannot set property 'user' of undefined at

node.js - Node 异步执行

node.js - nodejs express req.session undefined