新的mysql条目自动刷新

时间:2013-06-05 20:51:41

标签: javascript mysql

所以我为我工作的公司构建了一个仪表板,它只显示符合克里汀条件的所有mysql条目。

我的问题很简单,但答案可能不是。

在将新条目添加到数据库时,我可以使用哪些方法(最有可能使用JavaScript)刷新页面。

数据库从webform收集信息,因此当新用户填写表单时,Id喜欢刷新页面,从而显示新条目。

我目前正在使用JavaScript来刷新仪表板所在的网址,每5分钟一次,但我很乐意只在有新条目时才更新它。

谢谢!

1 个答案:

答案 0 :(得分:1)

请参阅答案的最后一个高级解决方案,使用Web套接字通知用户更改...

基本解决方案

您可以定期向应用程序发送Ajax请求以检查更改。这称为短轮询(如果您想再研究一下)。基本上,每隔30秒,您就会在应用程序上请求一些可以检查更改的脚本。

如果您不能依赖上次修改日期,则可以根据上次修改日期或基于序列化对象的哈希快照检测更改。

如果有更改,您可以通过Ajax请求返回该更改。如果可能的话,如果您可以在同一请求中发送所有更改,则不需要进行完全刷新。 (或者只是让客户请求另一页)。

高级解决方案

我使用的典型方法如下......

  • 用户连接到网页并打开到服务器的websocket(或者如果浏览器不支持WS,则进行长轮询)。有很多库/服务,比如Pusher.js或Socket.io(如果你想自己运行它)来处理这个问题。

  • 用户将“连接”到某个频道,表示他们有兴趣接收这条信息或数据或内容的更新等。

然后其他人可能会来更新一些数据,否则会改变他们对内容的看法。现在,第一个用户了解此更改的最简单方法是通过其活动Web套接字“推送”更改。

我处理这个问题的方法是将模型包装在事件监听器中。当我通过我的应用程序的持久层(将99%的情况都是数据库)保留模型时,我可以让我的事件监听器在相关的websocket连接通道上触发与此模型相关的事件/数据包。

您可以通过频道发送完整快照,也可以只说“嘿有可用的更新”,然后用户可以对服务器进行实际更改。

通过设置观察模型变化的事件监听器来实现“推送”方法的好处在于它可以很好地扩展,并且您不会有数百/数千个客户端不断刷新。