我正在开发一个具有某种实时更新的网站。现在该网站是使用数据集当前 ID 的 javascript 变量生成的。然后在几秒钟的时间间隔内,通过当前 ID 进行 AJAX 调用,如果有新的东西,服务器将其与最新的 ID 一起返回,然后在 javascript 中更新。很简单,但问题来了。
如果用户多次打开同一个页面,每个页面都会执行此 AJAX 请求,这会产生繁重的服务器负载。
现在我想到了以下方法:
该网站加载了当前时间戳和当前数据集 ID 的 javascript 变量。我想要的刷新间隔是例如 3 秒。
在网站中,间隔计数器每秒钟计数一次,并且每次时间戳达到(timestmap % 3===0)
返回 true 的状态时,都会更新内容。该链接看起来像http://www.example.com/refresh.php?my-revision=123×tamp=123456
现在这应该确保每个浏览器窗口调用相同的 URL。然后我可以打开浏览器级缓存。
但我真的不喜欢这个解决方案。我宁愿在 Cookie 中添加另一层数据共享。这应该不是什么大问题,我可以将每个请求存储在一个由时间戳和数据修订命名的 cookie 中,TTL 为 10 秒左右,然后首先检查它的存在。
但
这些页面将同时执行请求。因此,浏览器缓存和 cookie 的整个逻辑可能无法正常工作,因为请求是同时发生的,而不是一个接一个。
所以我考虑将当前连接限制在 1 个服务器端。但是我至少需要一个额外的虚拟主机,因为我真的不想为整个页面这样做。这让我遇到了有关跨站点策略的问题!
当然,有一些超级复杂的负载平衡解决方案/服务器端解决方案必然会请求 uri 和 ip 地址或其他东西,但这都是极端的矫枉过正!
应该是通病!想想脸书聊天。我真的不认为他们会在您打开的每个窗口中完成所有请求...
有任何想法吗?我真的被这个困住了!
Maby 我可以做一些跨窗口的 Javascript 通信吗?如果它们都在同一个域上,应该不是问题吗?
我当然可以做的一件事是服务器端缓存。这至少避免了数据库连接和密集计算......但它仍然是我想避免的请求。