【问题标题】:Secure countdown timer with ajax and django使用 ajax 和 django 的安全倒数计时器
【发布时间】:2010-12-07 04:20:35
【问题描述】:

我正在尝试在服务器端使用 ajax 和 django 制作一个类似于 rapidshare 中的倒数计时器。

我的 ajax 调用如下:

function loadXMLDoc(url,cfunc){
    if (window.XMLHttpRequest){
        xmlhttp=new XMLHttpRequest();
    }else{
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange=cfunc;
    xmlhttp.open("GET",url,true);
    xmlhttp.send();
}

function getFile(){

    countdown(15);//just shows the counter
    loadXMLDoc("getfiles",function(){
    if (xmlhttp.readyState==4 && xmlhttp.status==200){
        document.getElementById("dlzone").innerHTML=xmlhttp.responseText;
    }
  });
}

在服务器端我有一个测试功能:

def getfile(request):
    sleep(15)
    return HttpResponse("file")

一切都按预期工作,除了它让我想知道是否有更好的方法让服务器休眠 15 秒。如果我使用 javascript 完成所有等待,那么操作变量并绕过倒计时将非常容易。但是,让服务器等待并不是最好的解决方案。有什么建议吗?

【问题讨论】:

    标签: ajax django security timer


    【解决方案1】:

    这绝对是错误的做法。您将连接保持打开 15 秒,这意味着您必须能够在服务器上建立大量连接,即使在中等负载的情况下也是如此。

    相反,您应该调用服务器,只需设置请求生效的时间,然后在客户端上进行倒计时。倒计时完成后,您调用服务器上的另一个函数,该函数在发送文件(或有关文件的信息)之前检查超时(如果太早则返回错误)

    【讨论】:

    • 这听起来绝对是一种更好的方法。因此,如果理解正确,我应该有一个功能来设置截止日期,另一个功能来检查它是否到期。谢谢
    • 它们可以在同一个函数中。如果未知 id,则进行新的超时并返回还剩多长时间。如果已知id,则返回剩余时间,否则返回下载链接。你只是想避免保持连接......
    猜你喜欢
    • 2014-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-11
    • 1970-01-01
    • 1970-01-01
    • 2020-08-25
    • 2021-03-22
    相关资源
    最近更新 更多