我有一个html5 / javascript应用程序,其中多个用户可以查看任何给定时间的同一组数据。为了一个真实世界的例子,让我们说它是一个日历类型的页面。
因此,user1正在查看浏览器打开并查看日历页面,user2也在日历页面上。 User2对日历进行了更改,我希望(尽快)在user1的屏幕上识别和刷新这些更改。这样做的最佳方式是什么?
我正在考虑为活动用户创建一个mysql表,用于存储他们当前所在的页面以及上次更新的时间戳,然后使用ajax调用每隔几秒钟对服务器执行一次ping操作,并检查更新的时间戳,如果它比客户端更新,新数据被发送并且页面被“重新加载”。我正在重新加载引号,因为实际的浏览器窗口不会刷新,但是将通过javascript调用一个函数来重新加载页面。堆栈溢出执行其更新检查的方式排序,但不是告诉用户页面已更改并提供重新加载按钮,它应该自动发生。如果user1正在日历上工作,那么看起来用户2的屏幕不断刷新可能会非常烦人......
这是一个可怕的想法吗?是否每隔几秒就用ajax请求ping服务器会导致主要的减速?有一个更好的方法吗?我希望用户方面的观点是实时的,因为重要的是user1无法更新user2已经更改的日历页面上的元素。
更新:根据一些网络套接字研究,它似乎不是一个合适的解决方案。首先它与旧浏览器不兼容,我支持ie8 +和第二我不需要网站上所有用户的实时更新。该网站是基于帐户的应用程序,帐户可以有多个用户。数据只需要在这些用户之间同步。任何其他建议都会很棒。
答案 0 :(得分:2)
你需要实时应用程序。你应该看看socketio。每次用户登录时,都会让他监听服务器上的更改。然后,当服务器上的某些内容发生变化时,会通知每个用户。 你可以在官方网站上找到例子:http://socket.io/