2010-12-07 25 views
0

私は、サーバー側でajaxとdjangoを使って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秒間スリープ状態になることに近づきます。私はすべてのJavaスクリプトを使用して待っていた場合は非常に変数を操作し、カウントダウンをバイパスするのは簡単だろう。しかし、サーバーを待たせることは、最高の解決策のように感じることはありません。何かアドバイス?

答えて

3

これは間違った方法です。接続を15秒間開いたままにしておくと、中程度の負荷のシナリオでもサーバー上で大量の接続を取ることができなければなりません。

代わりに、リクエストを有効にする時刻を設定してから、カウントダウンするクライアントを呼び出す必要があります。カウントダウンが完了すると、サーバ上の別の関数を呼び出して、ファイルを送信する前にタイムアウトをチェックし(遅すぎるとエラーを返します)、

+0

これは間違いなく良いアプローチです。だから、正しく理解するならば、期限を設定する機能と期限があるかどうかを確認する機能が必要です。ありがとう – kirbuchi

+1

彼らは同じ機能にすることができます。未知のIDの場合は、新しいタイムアウトを作成し、残り時間を返します。既知のIDの場合は、残っている時間があればそれを返し、それ以外の場合はダウンロードリンクを返します。あなたはちょうど接続を保持しないようにしたい... – Cine

+0

kk、おかげで多くのあなたの助けに – kirbuchi

関連する問題