3

システムの設計中に遭遇したこの問題の解決策を正しい方向に向けるために、誰かが私を助けてくれることを願っています。

オークションに特定の終了日時があるオークション サイトを作成しています。

ユーザーに残り時間を表示する.NETタイマーがあり、これがカウントダウンするとイベントが発生し、バックエンドSQLデータベースを更新してオークションが完了したことを通知し、勝ったユーザーに通知してCLOSE関数を起動します。

タイマー イベントがこの CLOSE イベントを作成しないように、その時点でブラウザで物理的に開いていないオークションに対してこれをどのように行うことをお勧めしますか。

理想的には、オークションの終了時刻が過ぎた時点で何かを実行する必要がありますか?

ありがとう

4

2 に答える 2

4

1 つのオプションは、オークション アイテムが終了/終了する日時をデータベースに格納することです。次に、何かが閉じることに反応して(クライアントの場合はタイマー)、閉じられたものを更新することを心配しないでください。閉鎖されていると判断するのは、現在>閉鎖された日付/時刻であるという事実だけです。

編集:

以下のコメントで、オークションが終了したときにメールを送信する必要があると述べました. その場合、閉じられたすべてのイベントを選択してメールを送信するには、何らかのバックグラウンド処理が必要です。日時を格納することで、引き続きクローズを定義できます。その bg 処理は、現在がクローズ日より大きく、処理済みビットが false であるすべてのイベントを選択できます。それらを選択したら、それらを永続的なキュー (SQL のテーブル、Azure キューなど) に入れます。次に、バックグラウンド処理でキューを排出します。各アイテムを処理してメールを送信すると、イベントが処理済みとして更新されます。

バックグラウンド処理には複数のオプションがあります。

  1. Windows サービス
  2. 処理するスレッドプールを含む in proc タイマー (AT が 1 つある場合のみこれを行います)
  3. Azure でのワーカー ロール
  4. SQL エージェント ジョブ
于 2012-08-12T12:37:22.743 に答える
2

設定された時間 (オークションの最小時間よりも少し短いと思います。たとえば、1 日とします) でデータベースをポーリングする Windows サービスを記述します。そのサービスは、その時間内に終了するアクションをメモリに保存し、終了したアクションがあるかどうかを毎秒チェックします。終了したオークションについては、CLOSE イベントを発生させます。

于 2012-08-12T12:38:08.603 に答える