对于需要快速刷新数据的应用程序,使用JavaScript轮询服务器的最佳做法是什么?我正在使用jQuery作为前端,使用Java Spring Framework作为后端。
刷新数据的示例可以是非常快速更新的项目列表(每1秒)。
答案 0 :(得分:39)
您可能希望每隔一秒左右使用jQuery's Ajax functions轮询服务器。然后,服务器可以近乎实时地响应浏览器的说明。
您还可以考虑long polling而不是上述内容,以减少延迟而不会增加民意调查的频率。
引用Comet Daily: The Long-Polling Technique:
长轮询Comet技术是一种优化传统轮询以减少延迟的技术。
传统轮询以固定间隔向服务器发送
XMLHttpRequest
。例如,每15秒打开一个新的XMLHttpRequest
,立即收到响应并关闭连接。长轮询向服务器发送请求,但在有一个响应可用之前,不会将响应返回给客户端。一旦连接关闭,或者由于客户端收到响应或者请求超时,就会启动新连接。结果是延迟显着减少,因为服务器通常在准备好返回信息以返回客户端时建立连接。
除了上述内容之外,我还建议您查看以下Stack Overflow帖子的已接受答案,详细了解长轮询技术:
答案 1 :(得分:3)
我second Daniel's suggestion使用长轮询或推送。看看
CometD是一个可扩展的基于HTTP的事件路由总线,它使用称为Comet的Ajax Push技术模式。 “Comet”一词是由Alex Russell在他的帖子Comet:浏览器的低延迟数据中创造的。
他们有一个页面解释如何使用Spring完成这项工作:
答案 2 :(得分:2)
自2018年起,你应该使用带有promise语法的fetch函数:
<script type="text/javascript">
setInterval(function(){
fetch("your_serverside_script.php") // Any output from the script will go to the "result" div
.then(response => response.text())
.catch(error => document.getElementById("result").innerHTML = error)
.then(response => document.getElementById("result").innerHTML = response)
}, 1000); // Poll every 1000ms
</script>
<div id="result">result will appear here</div>