2

将 websockets 与 PHP 和 MySQL 脚本一起使用的最佳方式是什么?

如果我想在我的 PHP 站点中添加实时聊天,或者在实时执行 X 操作时将变量存储到 MySQL 数据库(例如,对于 RPG 网站交易)。

我找到了Ratchet,它是有效实现这些目标的好选择吗?也许同时使用 Node.js 和 PHP?我不知道该怎么办。

4

1 回答 1

4

几个月前我有同样的问题,经过一些修补和研究后自己回答了这个问题。

我将 Node.js 与 PHP 结合使用。

基本上,它是这样工作的。Apache/php 根据请求向客户端发送一个页面。它包含一个身份验证令牌。浏览器初始化 socket.io 并将令牌发送回节点 js 服务器。然后节点将令牌发送到私有 API(如果您愿意的话)到 Apache 服务器,请求用户所需的上下文(例如用户 ID)。当节点取回它时,它将它存储在一个"connection ID" => "user ID"表中。(或路由表(哈希映射的花哨的特定术语))

如果用户向另一个用户发送“聊天”消息,它会通过 ajax 进入 Apache,进行数据库/处理工作,然后将其传递回后端的 Node.js,后者将用户 ID 插入路由表并将消息发送到用户浏览器。

我不能发布代码,因为这可能会在某些时候用于生产,但这就是我使用基于 LAMP 的服务器的方式。

注意:您需要实现一个字符串帐户管理系统才能工作,我为我自己的帐户处理系统实现了这个概念,因此在我的情况下它是非常特定于应用程序的。

对令牌的需要是为了安全。例如,此令牌可以是会话 ID。可以在后端而不是前端派生用户 ID 的东西。它应该定期更改。这样,如果它被破坏,攻击者将无法长时间连接到实时会话,或者根本无法连接。

这个概念可以改进。例如每个请求的令牌,每个请求都会更改,只能使用一次。这是我目前正在使用我的实时通知系统进行的工作。

于 2013-11-04T18:11:03.787 回答