【问题标题】:NodeJS with PHP application and user session带有 PHP 应用程序和用户会话的 NodeJS
【发布时间】: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 之间共享我的用户?

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

【问题讨论】:

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


    【解决方案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 吗? (有链接吗?)
    猜你喜欢
    • 2020-01-14
    • 2014-10-09
    • 2017-12-19
    • 1970-01-01
    • 2019-06-24
    • 2023-04-09
    • 1970-01-01
    • 2013-04-12
    • 1970-01-01
    相关资源
    最近更新 更多