【问题标题】:AngularJS and MySQL real-time communicationAngularJS 与 MySQL 实时通信
【发布时间】:2017-09-28 10:56:09
【问题描述】:

我已经使用 AngularJS(前端)和 PHP/MySQL(后端)构建了一个 Web 应用程序。

我想知道是否有办法“监视” MySQL 数据库(没有 Node.js),所以如果一个用户向其中添加一些数据,这些更改也会同步给其他用户。

例如我知道 Firebase 会这样做,但它是面向对象的数据库,我无法像使用 SQL 那样执行高级查询。

我正在考虑使用$interval$http 并执行ajax 请求,这样我就可以检测到数据库中的更改。嗯,这是可能的,但它会每天向服务器发出数千个 http 请求,并在每个请求上解释 php。

我相信没有什么是不可能的,我只需要一个想法来做到这一点,而我没有,所以这就是我在这里寻求帮助的原因。

【问题讨论】:

  • 使用 Ajax 长轮询怎么样?它不是真正的“实时”,但它有点模仿它,对吗?至少那突然出现在我的脑海中。也许它不适合您的应用,但我不知道。

标签: javascript php mysql angularjs


【解决方案1】:

如果您想要一种“实时通信”形式,您可能需要结合来自客户端的某种形式的长轮询。除非你使用网络套接字,但这是一篇关于一堆不同事物的大文章。不过,您担心数据库的带宽和需求是正确的。所以这是我的建议:

如果您没有使用 Web 套接字的经验,请将您的事件记录在单独的表/视图中,并使用 pub/sub 方法为实体订阅事件,并将该事件广播到表中。然后对观察者视图进行长轮询以查看何时可能发生更改。如果确实发生了,那么您查询确切的值。

另一种选择是使用一些带有“决策者”的查询系统来保存消息。看看亚马逊的 SQS 平台,可以更好地解释它是如何工作的。基本上,您有一个保存消息的队列,并且决策者使用某种散列或排序方法选择存储消息的位置(以减少运行时间)。当客户端请求更新时,决策者会根据哈希/排序找到任何适用的消息并返回它们。然后你只需要决定如何以及何时销毁这些消息。

第二个选项需要更多的修补,所以这真的取决于你的偏好。我认为您会发现困难在于大多数解决方案必须处理消息必须被传递 1 次或更多次的事实,并且您需要跟踪某人何时收到消息以及现在是否可以从队列/事件表中删除,或者如果您仍需要等待。否则会消耗大量内存。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-22
    • 1970-01-01
    • 2018-12-21
    • 2013-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多