-6

顧客の座席を 30 分間予約するか、予約が削除される前にブラウザを閉じる必要がある Web アプリケーションを構築しています。これを行うための最良の方法の提案はありますか?

MYSQL にレコードを追加して cron ジョブを実行することを考えましたが、それではユーザーに最新の結果が得られません。何かアドバイスはありますか?

ありがとう!

4

3 に答える 3

5

有効期限のあるレコードを書き込みます。クエリを作成するときは、その有効期限を使用してください。期限切れのレコードを頻繁にクリーンアップします。

ただし、ブラウザを閉じるのはより複雑で信頼性がありません。http でのサーバーへの接続はステートレスであるため、ブラウザがいつ閉じられたかはわかりません。定期的に ajax でポーリングし、ポーリングの更新がなくなったらレコードを削除できます。

于 2013-03-29T15:03:05.540 に答える
0

この問題は、実際には 2 つの問題です。

  • 古いレコードをクリーンアップする方法

  • 期限切れのレコードを無視する方法.

expire_time予約テーブルにフィールドを追加します。おそらく、まだ利用可能な座席数を確認するロジックがいくつかあるexpire_timeので、そのロジックに を追加して、期限切れのレコードが無視されるようにします。

register_shutdown_handler()次に、期限切れのレコードをクリーンアップするために定期的に呼び出されるスクリプトまたは関数を作成します (cron は動作します)。

これにより、何らかの理由で cron が失敗したり遅くなったりした場合でも、誤って新しい予約をブロックすることはありません。クリーンアップ手順を完全にスキップして、(マイナーな) パフォーマンス ヒットを取ることもできます。

于 2013-03-29T15:04:59.313 に答える
-1

mysqlではなく、セッションで解決する必要があると思います。

しかし、あなたが主張するなら、ページがヒットするたびにアイテムを更新するべきです。

編集 はい、もちろんです。予約システムはマルチユーザーである必要があります。一方の利用者が予約した場合、もう一方の利用者が席を確保できてはなりません。

はい、簡単な解決策は、予約されるまでの時間を指定する予約済みという新しい列を追加することです。

なぜcronが必要なのですか?

ところで:セッションはクライアントではなくサーバーに保存されます。Cookie はサーバーではなくクライアントに保存されます。

于 2013-03-29T15:04:17.950 に答える