2

我有一个 html5/javascript 应用程序,多个用户可以在其中查看任何给定时间的同一组数据。为了一个真实世界的例子,假设它是一个日历类型的页面。

所以 user1 正在查看是否打开浏览器并查看日历页面,而 user2 也在日历页面上。User2 对日历进行了更改,我希望(尽快)在 user1 的屏幕上识别和刷新这些更改。做这个的最好方式是什么?

我正在考虑为活动用户创建一个 mysql 表,该表存储他们当前所在的页面和上次更新的时间戳,然后使用 ajax 调用每隔几秒 ping 服务器并检查更新的时间戳,如果它比他们有什么客户端,新数据被发送并且页面“重新加载”。我将 reloaded 放在引号中,因为不会刷新实际的浏览器窗口,但是将通过 javascript 调用一个函数来重新加载页面。堆栈溢出执行其更新检查的方式排序,但不是告诉用户页面已更改并提供重新加载按钮,它应该自动发生。如果 user1 正在处理日历,那么 user2 的屏幕不断刷新似乎很烦人......

这是一个可怕的想法吗?每隔几秒钟使用 ajax 请求 ping 服务器会导致严重的速度下降吗?有一个更好的方法吗?我希望任一用户端的视图都是实时的,因为 user1 不能更新 user2 已经更改的日历页面上的元素很重要。

更新:基于一些网络套接字研究,它似乎不是一个合适的解决方案。首先它与旧浏览器不兼容,并且我支持 ie8+,其次我不需要网站上所有用户的实时更新。该站点是一个基于帐户的应用程序,一个帐户可以有多个用户。数据只需要在这些用户之间同步。任何其他建议都会很棒。

4

1 回答 1

2

为此,您需要实时应用程序。你应该看看socketio。每次用户登录时,您都让他监听服务器上的更改。然后,当服务器上发生变化时,会通知每个正在收听的用户。您可以在官方网站上找到示例:http: //socket.io/

于 2012-09-19T12:41:07.480 回答