我正在开发一个有某种实时更新的网站。
现在,网站是用数据集当前ID的javascript变量生成的。
然后在某些秒的间隔内进行一个Ajax调用,传递当前的ID,如果有新的ID,服务器将返回它以及最新的ID,然后在javascript中进行更新。
很简单,但问题来了。
如果用户多次打开同一个页面,那么每个页面都会执行Ajax请求,这会产生大量的服务器负载。
现在我想到了以下方法:
网站将加载当前时间戳和当前数据集ID的javascript变量。
我想要的刷新间隔是3秒。
在网站中,间隔计数器每秒钟计数一次,每次时间戳到达一个状态
(timestmap % 3===0)
返回true,更新内容。
链接看起来像
http://www.example.com/refresh.php?my-revision=123×tamp=123456
现在应该确保每个浏览器窗口调用相同的URL。
然后我可以打开浏览器级缓存。
但我不太喜欢这个解决方案。
我更喜欢在cookie中添加另一层数据共享。
这不应该是什么问题,我可以将每个请求存储在一个cookie中,这个cookie由时间戳和数据修订命名,其生存时间(TTL)大约为10秒,然后首先检查其是否存在。
但是
页面将同时执行请求。因此,浏览器缓存和cookie的整个逻辑可能不起作用,因为请求同时发生,而不是一个接一个地发生。
所以我考虑将当前连接限制在1服务器端。但是我至少需要一个额外的vhost,因为我真的不想在整个页面上都这样做。
这让我遇到了有关跨站点策略的问题!
当然,有一些超级复杂的负载平衡解决方案/服务器端解决方案绑定到请求URI和IP地址之类的,但这都是极端的过度杀伤力!
这一定是个常见的问题!想想Facebook聊天吧。我真的不认为他们会在你打开的每一个窗口中完成所有的请求…
有什么想法吗?我真的被这件事缠住了!
我可以做一些窗口间的javascript通信吗?如果所有内容都在同一个域中,不应该是问题吗?
当然,我可以做的是服务器端缓存。这样至少可以避免数据库连接和密集的计算…但这仍然是一个我想避免的要求。