使用JavaScript进行服务器轮询

时间:2010-08-27 10:17:01

标签: javascript jquery ajax polling

对于需要快速刷新数据的应用程序,使用JavaScript轮询服务器的最佳做法是什么?我正在使用jQuery作为前端,使用Java Spring Framework作为后端。

刷新数据的示例可以是非常快速更新的项目列表(每1秒)。

3 个答案:

答案 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>