2012-05-07 9 views
1

一度に複数の要求/スレッドを持つ同じセッションを防ぐセッションIDのようなものはありますか?どのように機能するのですか?whileループやその他の長いループがPHPの後続リクエストを妨げる理由は何ですか?

私はいくつかのアクション(データベースのチェック)を待ってループする私のアプリケーションのコントローラクラスのメソッドのループを持っています。

あなたがコードを参照してくださいする必要があり、私は、次のメソッド内のコードの抜粋です。この抜粋が属する

// Times in hundredths of seconds. 
$timestamp = number_format(microtime(TRUE), 2, '', ''); 
$closing_time = $timestamp + ($auditorium_lot_timeout * 100); 

// Loop until time's up. 
do 
{ 
    usleep(250000); // Sleep 250ms to unload the CPU. 
    if (Model_Event::count_new_bids()) 
    { 
    // Etc, etc, etc... 
    // Change closing time to wait 10 seconds more. 
    } 
} while (number_format(microtime(true), 2, '', '') < $closing_time); 

// After time's up, continue with closing the bids definitely. 
// Perform some more actions. 

方法はAJAXによって要求されます。オークションの入札単価を引き下げることが目的ですが、最後の入札のチャンスを与えるために数秒待ってから閉じてください。これは、あらかじめ設定された時間(30秒など)をループし、ループ中にアプリケーション全体が同じユーザーからの他の要求を受け取ることができません。何故ですか?このユーザーはライブオークションのオペレーター/オークション担当者であり、オンラインで参加していないユーザー(実際の講堂でプレゼンテーションを行っているユーザー)に「入札」リクエストを送信する必要があります。

更新: JSリクエストコードは、CanJS modelsで抽象化されています。

+1

あなたはAJAXリクエストでJavascriptを投稿できますか? – TheOx

+0

@TheOx - 更新されたJS要求コードは、CanJSモデルによって抽象化されています。 –

+4

長時間実行しているスクリプトでphpセッションを使用している場合は、「php session concurrency exclusive lock session_write_close()」のバリエーションを検索してください。 – goat

答えて

1

これは、組み込みのセッションメカニズムがセッションファイルをロックする理由の1つで、依然としてそれが使用されている場合に発生します。

だからあなたのための可能な解決策は、session_write_close()

PSによって長い生きコードでセッションを解放することです:ああ、@クリスから、このようなコメントが見ていません。正当な理由として、私はこのリンクを貼った答えを盗むことではない、前に似たような質問に答えたことを証明する:https://stackoverflow.com/a/6405685/251311

関連する問題