1

私は、リマインダーを自分に送信するように設定し、リマインダーの時間を設定し、時間になるとメールが送信されるリマインダー タイプのサイトに取り組んでいます。

ただし、リマインダーは重要ではなく、約 5 ~ 10 分の遅延は許容されます。

2 つのオプションがあります。

1) 毎分 cron スクリプトを実行します。スクリプトは、 CURTIME() にスケジュールされたイベントが db にあるかどうかをチェックします (つまり、cron が 5:35:30 に実行される場合、5:35:00 に設定されたリマインダーをチェックします)。見つからない場合は終了します。見つかった場合は、メールを送信します。

2) または、10 分ごとに Cron スクリプトを実行できます。このスクリプトは、現在から 10 分前までの間にスケジュールされたリマインダーがあるかどうかを確認します。たとえば、cron が 5:35:30 に実行された場合、5:25:00 から 5:35:00 までのリマインダーをチェックします。見つかった場合は送信し、見つからない場合は終了します。

2番目の方法で私が抱えている唯一の問題は、これによってリマインダーが送信されないことがないかどうか確信が持てないことです.

たとえば、サーバーの負荷が高くなり、5:35:00 にスケジュールされた Cron が代わりに 5:37:00 に実行されたとします。その場合、5:35:00 にスケジュールされた電子メールが失われる可能性があります。

どの方法を使用する必要がありますか?

4

2 に答える 2

1

Windows および Unix マシンでatは、指定された時間にワンショット ジョブをスケジュールするために使用される があります。毎分チェック/送信するほうが理にかなっているほど多くのメールを送信していない限り、at代わりに「リマインダーを保存する」コードで送信をスケジュールする方が簡単でしょう。

于 2012-09-16T02:05:43.643 に答える
1

それらは同じオプションで、期間のみが異なります。

これは、間隔的なポーリングまたはキュー スイープと考えることができますが、「非リアルタイム」であるため、遅延を考慮して設計する必要があります。

一般に、すべてのスイープは遅延が発生した可能性があると想定する必要があり、さらにシステムには、キューに入れられた「古すぎる」通知を処理するためのポリシーが定義されている必要があります。(新しくエンキューされた通知を一掃する前に、システムの電源が 1 時間オフになっている場合はどうなるでしょうか?)

堅牢性のために、キューの処理がアトミックまたは同期化されていることを確認してください。同時スイープまたは後続のスイープからのアイテムの二重処理はありません。

于 2012-09-16T02:05:51.207 に答える