2

我有这个“疯狂”的项目开始,它背后的想法很清楚:有一些软件可以写入 MySQL 数据库。查询之间的间隔为 1 秒。现在我需要一个 Web 界面来加载这些数据库记录,并在新记录发生时继续显示它们。我应该使用的技术是 PHP 和 HTML5 WebSockets。我发现了这个不错的Ratchet库,我认为它符合我的需要,但是有一个问题,我不确定如何通知 PHP 脚本,或者在发生 MySQL 查询时如何向正在运行的 PHP WebSockets 服务器发送消息。现在我可以使用Comet并每秒发送对数据库记录的请求,但是它击败了我应该使用的 WebSokets。所以我真正需要的是 MySQL Pub/Sub系统。我'MySQL 触发器,但我看到它存在一些安全风险,并且认为这种情况下的安全性并不是真正的问题,因为系统将被隔离在 VPN 中,只有少数特定的人会使用它,我仍然想解决每一个可能的问题,并以正确的方式做每一件事。
然后是 MySQL 代理,我不知道,但如果它可以帮助我实现我的目标,我会非常考虑使用它。所以简而言之,问题是当 MySQL 查询发生时如何通知或运行 PHP 脚本?

4

1 回答 1

1

我会把这些问题分开一点。

你肯定需要某种发布/订阅系统。我的理解是 Redis 可以作为一个,但我从来没有使用过它,也无法就使用什么系统提出具体建议。无论如何,我不会将它直接附加到您的数据库中。当然,出于维护目的,您需要对数据库执行一些数据库操作,并且您不希望它向您的客户端刷新一百万行,因为它基于触发器。选择您的发布/订阅系统,独立于您在客户端执行的操作以及您对数据库执行的操作。决定因素应该是它如何与您的服务器端语言(在本例中为 PHP)交互。

现在您的 pub/sub 已经不碍事了,我将构建一个 API 服务器或各种摄取系统,从这些事务的任何来源获取数据。它将处理这些并发布消息,同时将它们插入数据库。

接下来,您需要一种方法将其传递给客户。正如您所发现的,Web Sockets 是一个不错的选择。你可以用 PHP 或其他任何东西来做到这一点。我更喜欢带有 Socket.IO 的 Node.js,它为不支持 Web 套接字的客户端提供了对长轮询 JSON(以及其他)的一个很好的回退。无论您在此处选择什么,都需要在您的 pub/sub 上侦听消息并为客户端发送正确的数据(可能会删除一些已发布但客户端并不立即需要的信息)。

于 2014-03-31T18:00:22.347 回答