将 websockets 与 PHP 和 MySQL 脚本一起使用的最佳方式是什么?
如果我想在我的 PHP 站点中添加实时聊天,或者在实时执行 X 操作时将变量存储到 MySQL 数据库(例如,对于 RPG 网站交易)。
我找到了Ratchet,它是有效实现这些目标的好选择吗?也许同时使用 Node.js 和 PHP?我不知道该怎么办。
几个月前我有同样的问题,经过一些修补和研究后自己回答了这个问题。
我将 Node.js 与 PHP 结合使用。
基本上,它是这样工作的。Apache/php 根据请求向客户端发送一个页面。它包含一个身份验证令牌。浏览器初始化 socket.io 并将令牌发送回节点 js 服务器。然后节点将令牌发送到私有 API(如果您愿意的话)到 Apache 服务器,请求用户所需的上下文(例如用户 ID)。当节点取回它时,它将它存储在一个"connection ID" => "user ID"
表中。(或路由表(哈希映射的花哨的特定术语))
如果用户向另一个用户发送“聊天”消息,它会通过 ajax 进入 Apache,进行数据库/处理工作,然后将其传递回后端的 Node.js,后者将用户 ID 插入路由表并将消息发送到用户浏览器。
我不能发布代码,因为这可能会在某些时候用于生产,但这就是我使用基于 LAMP 的服务器的方式。
注意:您需要实现一个字符串帐户管理系统才能工作,我为我自己的帐户处理系统实现了这个概念,因此在我的情况下它是非常特定于应用程序的。
对令牌的需要是为了安全。例如,此令牌可以是会话 ID。可以在后端而不是前端派生用户 ID 的东西。它应该定期更改。这样,如果它被破坏,攻击者将无法长时间连接到实时会话,或者根本无法连接。
这个概念可以改进。例如每个请求的令牌,每个请求都会更改,只能使用一次。这是我目前正在使用我的实时通知系统进行的工作。