对于需要快速刷新数据的应用程序,使用 JavaScript 轮询服务器有哪些好的做法?我在前端使用 jQuery,后端使用 Java Spring Framework。
刷新数据的示例可能是更新非常迅速(每 1 秒)的项目列表。
对于需要快速刷新数据的应用程序,使用 JavaScript 轮询服务器有哪些好的做法?我在前端使用 jQuery,后端使用 Java Spring Framework。
刷新数据的示例可能是更新非常迅速(每 1 秒)的项目列表。
您可能希望使用jQuery 的 Ajax 函数每隔一秒左右轮询一次服务器。然后服务器可以近乎实时地向浏览器响应指令。
您还可以考虑长轮询而不是上述方式,以在不增加轮询频率的情况下减少延迟。
长轮询 Comet 技术是一种优化传统轮询以减少延迟的技术。
传统轮询
XMLHttpRequest
以固定时间间隔向服务器发送一个。例如,XMLHttpRequest
每 15 秒打开一个新的,收到立即响应,然后关闭连接。长轮询向服务器发送请求,但在响应可用之前不会向客户端返回响应。一旦连接关闭,无论是由于客户端收到响应还是请求超时,都会启动新连接。结果是延迟显着减少,因为服务器通常在准备好返回信息以返回给客户端时建立了连接。
除了上述内容之外,我还建议您查看以下 Stack Overflow 帖子的已接受答案,以获取有关长轮询技术的详细说明:
CometD 是一种可扩展的基于 HTTP 的事件路由总线,它使用称为 Comet 的 Ajax Push 技术模式。“彗星”一词是亚历克斯·拉塞尔在他的帖子彗星:浏览器的低延迟数据中创造的。
他们有一个页面解释了如何使用 Spring 实现该工作:
从 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>