代码之家  ›  专栏  ›  技术社区  ›  The Surrican

在多浏览器窗口中使用SamAjax的最佳实践?

  •  0
  • The Surrican  · 技术社区  · 14 年前

    我正在开发一个有某种实时更新的网站。 现在,网站是用数据集当前ID的javascript变量生成的。 然后在某些秒的间隔内进行一个Ajax调用,传递当前的ID,如果有新的ID,服务器将返回它以及最新的ID,然后在javascript中进行更新。 很简单,但问题来了。

    如果用户多次打开同一个页面,那么每个页面都会执行Ajax请求,这会产生大量的服务器负载。

    现在我想到了以下方法:

    网站将加载当前时间戳和当前数据集ID的javascript变量。 我想要的刷新间隔是3秒。

    在网站中,间隔计数器每秒钟计数一次,每次时间戳到达一个状态 (timestmap % 3===0) 返回true,更新内容。 链接看起来像 http://www.example.com/refresh.php?my-revision=123&timestamp=123456

    现在应该确保每个浏览器窗口调用相同的URL。 然后我可以打开浏览器级缓存。

    但我不太喜欢这个解决方案。 我更喜欢在cookie中添加另一层数据共享。 这不应该是什么问题,我可以将每个请求存储在一个cookie中,这个cookie由时间戳和数据修订命名,其生存时间(TTL)大约为10秒,然后首先检查其是否存在。

    但是

    页面将同时执行请求。因此,浏览器缓存和cookie的整个逻辑可能不起作用,因为请求同时发生,而不是一个接一个地发生。

    所以我考虑将当前连接限制在1服务器端。但是我至少需要一个额外的vhost,因为我真的不想在整个页面上都这样做。 这让我遇到了有关跨站点策略的问题!

    当然,有一些超级复杂的负载平衡解决方案/服务器端解决方案绑定到请求URI和IP地址之类的,但这都是极端的过度杀伤力!

    这一定是个常见的问题!想想Facebook聊天吧。我真的不认为他们会在你打开的每一个窗口中完成所有的请求…

    有什么想法吗?我真的被这件事缠住了!

    我可以做一些窗口间的javascript通信吗?如果所有内容都在同一个域中,不应该是问题吗?

    当然,我可以做的是服务器端缓存。这样至少可以避免数据库连接和密集的计算…但这仍然是一个我想避免的要求。

    2 回复  |  直到 14 年前
        2
  •  2
  •   dekomote    14 年前