当数据库中的任何表有更新时,如何从数据库中获取数据


how to get data from database when there is a update in any table in the database

就像一些用户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,例如: