2010-12-07 26 views
0

J'essaie de faire un compte à rebours similaire à celui de rapidshare en utilisant ajax et django côté serveur.Compte à rebours sécurisé avec ajax et django

Mon appel ajax est le suivant:

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; 
    } 
    }); 
} 

et sur le côté serveur que j'ai une fonction de test:

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

Tout fonctionne comme prévu, sauf qu'il me laisse se demander s'il y a une meilleure approche que le serveur dort pendant 15 secondes. Si je faisais tout l'attente en utilisant javascript, il serait très facile de manipuler les variables et de contourner le compte à rebours. Mais encore, avoir le serveur en attente ne se sent pas comme la meilleure solution. Aucun conseil?

Répondre

3

C'est certainement la mauvaise façon de le faire. Vous maintenez la connexion ouverte pendant 15 secondes, ce qui signifie que vous devez être en mesure de prendre une tonne de connexions sur votre serveur, même dans un scénario modérément chargé. Au lieu de cela, vous devriez faire un appel au serveur, où vous définissez simplement une heure où la demande deviendra valide, puis sur le client que vous faites le compte à rebours. Lorsque le compte à rebours est terminé, vous appelez une autre fonction sur le serveur, qui vérifie le délai (et renvoie une erreur si elle est trop tôt) avant d'envoyer le fichier (ou des informations sur le fichier)

+0

qui ressemble certainement à une meilleure approche . Donc, si je comprends bien, je devrais avoir une fonction pour définir la date d'échéance et une autre pour vérifier si elle est due. Merci – kirbuchi

+1

Ils peuvent être dans la même fonction. Si ID inconnu, alors faites un nouveau délai et retournez combien de temps à gauche. Si vous connaissez l'identifiant, renvoyez le temps restant, sinon, renvoyez le lien de téléchargement. Vous voulez juste éviter de maintenir la connexion ... – Cine

+0

kk, merci beaucoup pour votre aide – kirbuchi