就像一些用户x在网站上更新了一些信息,而另一些用户z应该在不刷新页面的情况下收到关于x更新的通知。
这是一个非常大的问题,包含了很多不同的概念。你应该在不同的层次(服务器、客户端和数据库)工作,每次都有多种可能性。
1)客户端pull
在客户端页面(用户Z)中,您应该每隔一段时间(每1秒?)发送一次AJAX请求,服务器端的脚本应该检测自上次请求以来更改了哪些值。这在很大程度上依赖于时间戳字段的存在,该字段在每次SQL插入或更新(或删除?)时使用触发器进行更新。
2)服务器推送使用websockets,客户端(用户Z)与服务器保持打开的连接。在服务器端,一个进程在后台不断运行,并定期检查数据库(每1秒?)是否更新(同样基于时间戳),并通过websocket将差异发送给客户端。
发现变化
如果您的数据库没有固定一些可识别的时间戳或id或其他,您可以尝试使用触发器执行外部程序,这可能会增加另一层复杂性。
不需要太多技术,你可以使用事件调度程序和方法的组合来推送通知(像websocket服务)。
你的websocket服务应该订阅你的事件调度程序。
当更新发生时,调度一个事件,socket服务将使用该事件将数据发送给适当的用户集。
在web应用程序方面,你当然必须订阅websocket,然后对传入的数据做任何需要的处理。
这个方法(使用事件分派器)意味着你的服务不是紧密耦合的,因此更容易维护和测试。
window.setInterval(function(){
/// ajax call here, for example:
$.ajax({
type: "POST",
url: 'your-url-to-check-if-there-is-any-updates',
dataType: "html",
data: { your data},
success: function(data) {
// do something with notifications
return data;
}
});
}, 5000);
这将每5秒检查一次表。你需要发送旧的数据到url来检查是否有新的东西,如果有,在success函数中做一些事情。
但是,不建议这样做。
如@Simon所说,使用websockets,例如: