Безопасный таймер обратного отсчета с ajax и django - PullRequest
0 голосов
/ 07 декабря 2010

Я пытаюсь сделать таймер обратного отсчета похожим на таймер в Rapidshare, используя ajax и django на стороне сервера.

Мой вызов 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, было бы очень легко манипулировать переменными и обойти обратный отсчет.Но, тем не менее, ожидание сервера не является лучшим решением.Любой совет?

1 Ответ

3 голосов
/ 07 декабря 2010

Это определенно неправильный способ сделать это.Вы удерживаете соединение открытым в течение 15 секунд, что означает, что вы должны иметь возможность установить тонну соединений на вашем сервере, даже в умеренно загруженном сценарии.

Вместо этого вам следует позвонить на сервер., где вы просто устанавливаете время, когда запрос станет действительным, а затем на клиенте вы делаете обратный отсчет.Когда обратный отсчет завершен, вы вызываете другую функцию на сервере, которая проверяет время ожидания (и возвращает ошибку, если оно слишком рано) перед отправкой файла (или информации о файле)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...