0

私は基本的なログイン/登録ページを持っており、登録時にタイムスタンプがmysqlデータベースに保存されます(テーブルタイマー、列のクールダウン):

$settime = mysql_query("INSERT INTO `timer` (`cooldown`) VALUES(0)") or die(mysql_error());

私が今やりたいこと (ブラウザー mmorpg を作成しています)、特定の POST 要求を実行するときに、データベースのタイマーをオフにすることです。このタイマーは 1 分で、次のようにユーザーにも表示されます。<?php echo $timer['cooldown']; ?>タイマーが 0 の場合はいつでも特定の機能を再度実行でき、タイマーは再び 60 秒に設定されます。

知識不足で申し訳ありませんが、これを行う方法をどこにも見つけることができません。

4

1 に答える 1

1

ここで実行しようとしているバックグラウンド ジョブは、PHP のシェアード ナッシング環境における要求と応答のサイクルという Web 開発の原則に反します。しかし、固定サイクルを断ち切る方法はいくつかあります。

  • 1 分後に DB 更新を行う必要がある場合は、MySQL イベントを使用できます: http://dev.mysql.com/doc/refman/5.1/en/events.html
  • 呼び出したい関数の実行時間が長すぎない場合は、すべてのユーザー要求をチェックして、timerテーブルに 1 分より古いエントリがあるかどうかを確認できます。
  • 毎分 cron ジョブによって呼び出される PHP スクリプトを作成します。テーブルに未処理のアイテムがあるかどうかを確認timerし、それらに対して何かを行います。
  • 毎分起動してチェックするPHP デーモンスクリプトを作成します。
  • 1 分後にユーザー ページで何かを変更する必要がある場合は、JavaScript タイムアウトと AJAX または Websockets を使用してクライアント側で PHP スクリプト呼び出しを実行することをお勧めします。

ユーザーにカウントダウンを表示するには、JavaScript を使用する必要があります。サーバー側のタイマーを使用している場合は、表示目的だけに使用して、終了時にカウントダウンを非表示にすることができます。「タイムアウトが終了する前にユーザーが新しいページを開く」問題を回避するには、残りの秒数のデータを、dataJavaScript コードが読み取れる HTML 属性に配置します。

于 2013-09-19T14:40:24.613 に答える