我注意到我的一些 ajax-heavy 网站(我访问的网站,不是我建立的网站)具有某些自动刷新功能。例如,在 GMail 中,如果我收到一条新消息,我会在没有重新加载页面的情况下看到新消息。Facebook 基于浏览器的 IM 客户端也是如此。据我所知,没有任何 java 小程序处理服务器-浏览器绑定,所以我只能假设它是由 AJAX 完成的,也许是我不知道的一些元素。所以根据我的最佳猜测,它是通过以下两种方式之一完成的:
javascript 对服务器端脚本进行稳定的“ping”,检查可能可用的任何更新(这可以解释为什么其中一些页面会导致任何其他重型页面爬行)。或者
javascript 处于闲置状态,服务器端脚本实际上将任何更新“推送”到浏览器。但我不确定这是否可能。我想有某种 AJAX 功能仍然 ping,但它只是询问“任何更新?” 并且服务器脚本有一个简单的布尔值,表示“不”或“我很高兴你问了”。但如果是这种情况,任何数据更改都需要直接调用脚本,以便它准备好数据更改并对布尔函数进行更改。
那么这可能/可行/它是如何工作的?我想像:
有人向服务器发送电子邮件/IM/DB 更新,服务器使用脚本的 URL 加上一些相关的 GET 变量调用脚本,脚本记录更改并更新“可用更新”变量,AJAX 得到响应实际上更新,AJAX 运行其正常的“更新页面”功能,执行正常的更新脚本并将它们输出到浏览器。
我之所以问,是因为 js 只是在进行持续检查似乎效率很低,这需要 a) 服务器每 1.5 秒工作一次,b) 我的浏览器每 1.5 秒工作一次,这样我就可以说“哦,男孩,我有一个 IM!就像一个真正的 IM 客户端一样!”