0

クライアント側には、典型的な形式の JS カウンターがあります。

xx 日 xx 時間 xx 分 xx 秒残り

そして、それは数え続けます。カウンターがゼロになるたびに、イベントの登録を自動的に終了したいと考えています。

私が得られないのは、サーバー側とクライアント側の両方で時間を同期する方法です。これにより、タイムゾーンを考慮して少なくとも分の精度でcronジョブが実行されます。する必要がありますか?データベースで「日付」「時刻」「ロケール」以外に何が必要ですか?

コンテキストはJava + Spring + Postgresql上のWebアプリケーションです

ソリューション全体は必要ありません。掘り下げを開始する場所に関する適切なヒント (またはリンク) が必要です。

4

3 に答える 3

1

いくつかのアイデア:

  • ページを自動更新に設定する

  • 定期的に AJAX リクエストを送信して再同期します。

でも ...

  • 実際には、クライアント側とサーバー側のクロックが数時間にわたってかなり変動するのは驚くべきことです。まともな PC は、1 日に数秒以上ドリフトすることはありません。

  • インターネット上で時計を正確に同期することは簡単な問題ではなく、おそらく HTTP ベースのサービスを使用して解決しようとしている問題ではありません。

これら 2 つをまとめると、タイマーの再同期はおそらく試す価値がないと思います。

于 2012-07-10T13:08:05.470 に答える
0

クライアント側でカウントダウンが終了したことをサーバーに知らせる必要がある場合は、カウントダウンが終了したときに AJAX リクエストを送信するだけです。

于 2012-07-10T13:00:05.317 に答える
0

タイマーが切れた場合、クライアントからの情報の送信を拒否するだけです

//have customer enter entry information

if (endtime > system.currentTimeMillis())
{
    // accept entry
    Outputstream.Write(Entry)
{

else
{
    "Sorry Registration Closed"
}

これを行うもう 1 つの方法は、サーバー側でカウントダウンし、手遅れの場合はエントリを拒否することです。

Entry = Inputstream();
if (system.currentTimeMillis() < endtime)
{
    myEntries[x] = Entry;
    response = "Entry accepted!"
}
else
{
    response = "Entry denied: Registration closed"
}

Outputstream.write(response);
于 2012-07-10T13:07:26.450 に答える