2

私は PHP スクリプトを持っています。これは、呼び出されたときに何らかの処理を行い、3 秒間スリープしてから、その結果をエコーし​​ます。

そして、上記のスクリプトを (Ajax リクエスト1/10で) 毎秒呼び出すこのページがあります。応答が得られたら、div 要素内に数値を書き込みます。

問題は、onreadystatechange ハンドラーが 3 秒ごとに起動され、30 個の数値をまとめて書き込むことです。sleep()必要なように動作する他の代替手段はありますか?

リクエストされるページのコード スニペットは次のとおりです。

ignore_user_abort(true);
$time=microtime(true)*10000;
changemystatus(1, $time); //this writes to a database
sleep(3);
if ($time>=getmytime()){ //getmytime() reads the data previously written by changemystatus()
    setstatus(0); // still writing to that DB
    echo("1");
}else echo ("0");

基本的に、ユーザーがもうリクエストを送信していない場合 (ユーザーがいなくなった、接続がダウンした、または JS を無効にしたなど)、DB の「ステータス」フィールドを 0 に変更して、他のプレイヤーが自分のことを知ることができるようにします。今「オフライン」。

4

2 に答える 2

0

新しい答え: ユーザーがまだアクティブかどうかを検出したい場合は、サーバーとの最後の通信のタイムスタンプを記録します。

次に、カットオフ ポイントを定義します。たとえば、5 分です。

if ($last_active < (time() - 5 * 60)) {
    // user is inactive
}
于 2013-06-21T16:34:57.050 に答える
0

を使用して JavaScript で「スリープ」できますsetTimeout

元:

setTimeout(function () {
    console.log("3 seconds have passed");
}, 3000);

これsetTimeoutは非同期であるため、JavaScript やブラウザーをブロックしません。関数を実行する 3 秒 (3000 ミリ秒) 後に発生するイベントをスケジュールします。

于 2013-06-21T16:16:18.753 に答える