0

在我的应用程序中,我每秒轮询网络服务器以获取消息并将它们显示在前端。我使用 setInterval 来实现这一点。但是,只要用户停留在该页面上,即使没有数据,客户端也会继续使用请求轮询服务器。服务器确实会通过设置变量在不再生成消息时给出指示。我想过使用这个变量来清除间隔并停止计时器,但这没有用。在这种情况下我还能使用什么?我正在使用 jquery 和 django。这是我的代码:

jQuery:
 var 刷新 = setInterval(
        功能 ()
            {
                var toLoad = '/myMonitor'+' #content';             
                $('#content').load(toLoad).show();

            }, 1000); // 每 1000 毫秒刷新一次
    });

html:
div id=内容在这里

我可以在每次刷新时访问 django 变量以在 html 中完成。如果有的话,我该如何设置 clearInterval ?

注意:堆栈溢出不允许我放 is > < 所以 html 是不完整的

谢谢

更新于 2010 年 3 月 16 日 ,我一定是做错了什么。但想不通。这是我的带有 clearTimer 的脚本,它不起作用。

var计时器=空;
$(函数(){
        if ("{{status}}" == "False")
        {
           清除间隔(定时器);
        }
        别的
        {
            计时器 = setInterval(
                功能(){
                    var toLoad = '/myMonitor'+' #content';  
                    $('#content').load(toLoad).show();}
                    ,1000); // 每 1000 毫秒刷新一次
        }
    });

status 是“views.py”(Django)中的一个布尔值集。谢谢一堆。

4

2 回答 2

3

有几个人已经用特定资源回答了您的问题,所以我想我会提供一些背景知识。

简而言之,您希望服务器将数据推送到浏览器以避免广泛的客户端轮询。没有很好的跨浏览器方式来支持服务器推送,因此需要更少轮询的常见解决方案是使用Comet(另一种清洁产品,如 AJAX)长轮询技术。

使用 Comet,浏览器发出请求,服务器保持连接打开而不响应,直到有新数据可用。当服务器确实有新数据时,它通过打开的连接发送它,浏览器立即接收它。如果连接超时,浏览器会打开一个新的。这使服务器可以在数据可用时立即将数据发送到客户端。正如其他人所指出的,这种方法需要对您的 Web 服务器进行特殊配置。您需要在服务器上设置一个脚本,该脚本会定期检查数据并在客户端存在时对其进行响应。

使用这种方法要记住的是,大多数 Web 服务器都是为了从客户端获取请求并尽快响应而构建的;它们不打算长时间保持活力。使用 Comet,您将拥有比平常更多的开放连接,可能消耗的资源比您预期的要多。

于 2010-03-15T17:22:17.127 回答
0

您的 clearInterval 检查仅在触发文档就绪事件时进行检查。

如果您提供的代码正是浏览器中的代码,那么您将字符串“{{status}}”与字符串“False”进行比较。我宁愿看着油漆变干,也不愿等待评估为真。

如果您的请求完成时间超过 1 秒怎么办?: 你会用请求淹没你的服务器。

function update () {
  $('#content').show().load('/myMonitor'+' #content', function (response, status) {
    if (!/* whatever you're trying to check*/) {
      setTimeout(update, 1000);
    };
  });
};

$(document).ready(function () {
  update();
});

比您之前的位置更近,但您仍然需要弄清楚您将如何决定何时停止投票。

于 2010-03-16T20:11:56.473 回答