【发布时间】:2013-11-12 13:53:32
【问题描述】:
我目前正在尝试使用 WebSockets,以减少/消除在潜在的低带宽环境中对持续 AJAX 请求的需求。所有设备都与 WebSocket 兼容,所以那里没有问题,我正在尝试将其保留为原生 PHP WebSocket,没有 node.js 或其他框架/库(到目前为止还不错)。
我要做的是决定如何通知已连接的客户端有关另一个客户端对数据库的更新。有问题的用例是一个人在他们的设备上按下一个按钮,然后它会提醒该人的经理注意该按下。所以我有两个选择如下:
1.循环数据库查询 (PHP)
我的第一个想法是在 WebSocket 服务器中插入一个查询,该查询实际上是在说“警报字段是否已更改?如果是,请通知经理”。虽然这是最直接和最明智的方法(我能想到的),但设计一个旨在减少服务器压力的 PHP 脚本似乎很浪费,现在每秒运行一次查询,但是,至少这可以确保当检测到数据库更新时,会发送更新。
2。从客户端发送通知
我的另一个想法是,当客户端更新数据库时,他们实际上可以自己发送 WebSocket 通知。这具有减少任何密集和循环查询的优势,但也意味着我需要在每次我想要更改任何数据时发送 WebSocket 消息,例如:
$.post("AttemptDatabaseUpdate.php", {Data}).function(Result) // Don't worry about the semantics of this, it's not actual code
{
if(Result == "Successful")
{
SendWebSocketNotification(OtherData);
}
}
也许这是最好的选择,因为它是最有效的,但我担心在更新数据库和发送 WebSocket 通知之间连接可能会断开,这可能需要回退检查PHP 文件,很像第一个解决方案中的文件,尽管间隔较长(比如每 30 秒)。
3。 MySQL 触发器?
这纯粹是一种猜测,但也许另一种选择是创建一个 MySQL 触发器,它可以以某种方式直接通知 server.php 文件?我不知道这将如何工作,并且会冒险猜测这可能最终会产生与解决方案 #1 相同或相似的查询要求,但这只是一个虽然......
提前感谢您的帮助:)
编辑:解决方案的可能性 4
事实上,另一个想法刚刚出现在我的脑海中,用于更新数据库的 PHP 文件实际上可以在其中内置 WebSocket 消息。这样当PHP文件更新数据库时,通过PHP通知WebSocket服务器,这可能吗?
【问题讨论】:
-
您考虑过使用 SSE(服务器端事件)吗?
-
不是在此之前,只是查看了它们,虽然它们确实有潜力,但我觉得有一个事件监听器会比只推送一个通知效率低?尤其是随着系统的发展,许多类似的用例都可能通过一个系统运行。或者是否有某种方式让 SSE 执行“在 MySQL 数据库更新时,通知 WebSocket 服务器”方面?
-
对于单向,SSE 似乎更易于实施和管理,并且从一些文章中阅读,它们的性能似乎相似。我认为处理更新的脚本也可以用于在数据库中成功更新后将更新推送出去。
标签: javascript php mysql websocket phpwebsocket