我有一个基于 php 的 Web 应用程序,可以捕获数据库表中的某些事件。它还具有这些捕获事件的可视化:一个列出由 ajax 控制的事件的 html 表。
我想添加一个可选的“实时”功能:按下按钮(“打开”)后,从那一刻起捕获的所有事件都将插入到已经可见的表中。必须发生三件事:注意事件、获取事件数据并将其插入表中。为了将服务器负载保持在合理的范围内,我不想使用 ajax 请求轮询新事件,而是更喜欢长轮询策略。
这样做的问题显然是,在进行长轮询 ajax 调用时,服务器对应方必须监视事件。由于事件是由 php 脚本注册的,因此如果不再次轮询数据库以进行更改,就无法简单地注意到该事件。这是因为捕获操作在另一个进程中运行,而不是观察长轮询请求。我环顾四周,为这种进程间通信找到了一种可用的机制,正如我从 linux 下的富客户端所知道的那样。确实有信号量、共享内存甚至 posix 的 php 扩展。然而,它们都只存在于 linux(或类似 unix)系统下。虽然通常情况下,该应用程序可能会在极少数情况下在 MS-Windows 系统下使用。
所以我的简单问题是:在所有(大多数)系统上通常都有什么方法可以将此类事件推送到为长轮询 ajax 请求提供服务的 php 脚本?因为我在其他地方已经有一个事件,所以不需要不断地轮询文件或数据库?