PHP Websockets Mysql Pub / Sub

时间:2014-03-30 12:07:11

标签: php mysql publish-subscribe phpwebsocket

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

1 个答案:

答案 0 :(得分:1)

我会稍微分开一些问题。

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

既然你的pub / sub已经不在了,我会构建一个API服务器或者从这些事务来自哪里获取数据的类型的摄取系统。它将处理这些并发布消息,同时将它们插入到数据库中。

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