3

在我正在维护的网站中,我想添加一个新功能,其功能类似于 facebook 通知。我想自动检测数据库中的更改,然后如果插入/更新了新项目,那么它将产生通知。

我发现了这个:http ://www.9lessons.info/2009/07/auto-load-refresh-every-10-seconds-with.html

它使用 Jquery 自动更新 div。我试过了,修改了,它工作了:)

4

3 回答 3

3

对于即时通知,您需要 WebSockets,例如用于 PHP 的Ratchet 。

检测数据库中的更改并不容易实现,更容易的是在更新数据库时用 PHP 发送消息。

为此,您需要与当前访问该页面的每个人创建一个 websocket 连接。当有人更新或插入时,将向所有连接的用户发送一条消息。

查看此页面以获取简单的教程http://socketo.me/docs/hello-world

于 2013-05-17T15:18:07.527 回答
1

有一种称为彗星(或长轮询)的技术可以帮助您实现这一目标。您不想做的是每x秒轮询一次服务器(通过 AJAX)以查看数据是否已更改 - 这是浪费和资源密集型的。基本上,comet 所做的就是轮询服务器以查看是否有任何新的更改要拉,只有当实际发生更改时,服务器才会响应。这意味着您只有在实际要提取新数据时才访问服务器。

它很容易在 JavaScript 中实现,但是由于您在标题中提到了 jQuery,所以这个插件可能有用。

于 2013-05-17T15:18:52.720 回答
0

你可以用触发器来做到这一点,但我会用一种更简单的方式来做到这一点:

1-当有人进行所需的插入/更新时,在同一个脚本中在专用表中插入一行,我们称之为它notifications,对于您要发送的每个通知,它看起来像这样:

 notifications(id, user_id, message, status)

2-然后有一个cron作业执行每X次读取所述表并向用户发送一个通知,user_id并从表中删除该行(或者如果您想知道您发送了什么,则将其设置为“已发送”)。

编辑:crontab 示例,每 3 分钟执行一次。

首先键入crontab -e要编辑,然后插入以下行:

0 */3 * * * complete_path_to_the_script > /dev/null
于 2013-05-17T15:18:27.983 回答