带有 PHP 应用程序和用户会话的 NodeJS

Posted

技术标签:

【中文标题】带有 PHP 应用程序和用户会话的 NodeJS【英文标题】:NodeJS with PHP application and user session 【发布时间】:2014-01-11 10:00:35 【问题描述】:

我有一个 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 之间共享我的用户?

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

【问题讨论】:

【参考方案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 中复制您的用户身份验证逻辑

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

就在 MySQL 中存储消息而言

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

在旁注中查看https://github.com/kyle-dorman/ChitChat.js 以向您的网站添加实时聊天功能。

【讨论】:

感谢您的回答。所以,根据你的说法,最好的解决方案是将我的所有逻辑都放在 NodeJS 上,而不是使用 PHP 来存储信息并使用 Redis 在 PHP 和 NodeJS 之间共享会话? 答案只是建议了一种在 PHP 和 NodeJS 端之间共享用户的方法。我不完全了解您的用例。您能否编辑您的答案并详细说明一下? 好的,我已经编辑了我的帖子。无论如何,感谢您的宝贵时间。 感谢您的帮助! 你能告诉我们更多为什么不建议只为 WebSockets 使用 nodejs 吗? (有链接吗?)

以上是关于带有 PHP 应用程序和用户会话的 NodeJS的主要内容,如果未能解决你的问题,请参考以下文章

Nodejs Express 用于 Web 应用程序 JWT,带有数据库或会话以验证用户身份

PHP + socket.io(会话、授权和安全问题)

如何将用户名从php会话存储到nodejs中的socket.io库和页面刷新时套接字连接断开。为啥?

在带有 express-session 的 NodeJS 中使用安全 cookie 时会话不持久

验证 socket.io/nodejs 的用户

主要的 PHP/MySQL 登录项目,带有会话变量