我有一个 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/