【问题标题】:Server polling with JavaScript使用 JavaScript 进行服务器轮询
【发布时间】:2011-04-04 17:39:03
【问题描述】:

使用 JavaScript 轮询服务器的一些好的做法是什么? 需要非常快速地刷新数据的应用程序?我在前端使用 jQuery,后端使用 Java Spring Framework。

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

【问题讨论】:

  • 快速定义。一分钟一次?每十秒一次?每秒一次?什么样的数据?
  • 每 1 秒,数据会以非常少量的方式显示文本,可能还有一些 html

标签: javascript jquery ajax polling


【解决方案1】:

您可能希望使用jQuery's Ajax functions 每秒左右轮询一次服务器。然后服务器可以近乎实时地向浏览器响应指令。

您也可以考虑使用long polling 代替上述方法,以减少延迟而不增加轮询频率。

引用Comet Daily: The Long-Polling Technique:

长轮询 Comet 技术是一种优化传统轮询以减少延迟的技术。

传统轮询会以固定的时间间隔向服务器发送XMLHttpRequest。例如,每 15 秒打开一个新的XMLHttpRequest,收到立即响应,然后关闭连接。

Long-polling 向服务器发送请求,但在响应可用之前不会向客户端返回响应。一旦连接关闭,无论是由于客户端收到响应还是请求超时,都会启动新连接。结果是延迟显着减少,因为服务器通常在准备好返回信息以返回给客户端时建立连接。

除了上述之外,我还建议您查看以下 Stack Overflow 帖子的已接受答案,以获取有关长轮询技术的详细说明:

【讨论】:

    【解决方案2】:

    second Daniel's suggestion 使用长轮询或推送。退房

    CometD 是一种可扩展的基于 HTTP 的事件路由总线,它使用称为 Comet 的 Ajax Push 技术模式。 “彗星”一词是由 Alex Russell 在他的文章彗星:浏览器的低延迟数据中创造的。

    他们有一个页面解释如何使用 Spring 进行这项工作:

    【讨论】:

      【解决方案3】:

      从 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>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-01-22
        • 1970-01-01
        • 2012-05-08
        • 1970-01-01
        • 2011-12-09
        • 1970-01-01
        • 2015-04-06
        • 1970-01-01
        相关资源
        最近更新 更多