5

知識を得るためだけにオンライン試験のプロジェクトに取り組んでいます。停電の場合があり、候補者が再度ログインする場合、停電中に無駄になった時間を指定する必要があります。しかし、私のjavascriptコードでは、サーバー時間に対応する正確な2時間後に試験が終了します(AJAXここでは使用されています)。時間が終わると、生徒はホームページにリダイレクトされます。私は解決策を考えましたが、それを実装するための開始点が見つかりません。

セッションが維持されているので、彼が使用した時間を2時間から維持でき、database. 彼が再ログインすると、彼に対応する特定の行がチェックされ、時間が更新されます。

しかし、私はそれを実装することができません。それに対する別の解決策や、私が考えている方向性が正しいか間違っているか教えてください。

試験時間は 2 時間の開始から再開されます。停電時カチカチしていた時刻から復帰しません。この場合、電源障害が発生した場合でも、候補が再度ログに記録された場合でも、少なくとも同じことです。そして、この問題のコードを求めているわけではありません。考えられるヒントや方向性が欲しいだけです。その背後にあるコンセプトが何であるかを知りたいだけです。

4

2 に答える 2

4

問題を少し形式化します。

  • ユーザーがログインし、t0で試験を開始します。彼らの試験はt120で終了します。
  • 試験終了 ( tx )前のある時点 (試験開始 x 分) で電源障害が発生し、試験中の人は試験を再開する必要があります。
  • txの後のある時点で、システムはオンラインに戻ります
  • ty以降のある時点で、ユーザーは再度ログインし、それをtzと呼びます。あなたが示したように、これはtyと同じです。
  • 彼らは、試験を完了するためにさらに120 - x分の時間が与えられます。試験が終了するポイントは、現在tz + (120 - x)です。

考えられる解決策:

当初は非常にセッション指向のアプローチを考えていましたが、これが進むべき道かもしれません:

  • 周期pでシステム全体のクロック (「ハートビート」と考えてください) を実装します。システムが起動している間隔 p ごとに、グローバル カウンターをインクリメントします。
  • 各検査のこのグローバル カウンターとして t0 を記録します。
  • 別の行で、検査の経過時間を更新します。これは t0 の現在の値です。コードには、進行中の作業を保存し、経過時間を更新する機能が含まれている可能性があります。各ページ/セクションの読み込みの経過時間も更新します。最後の経過時間の更新/進行中の保存の間に一部の作業が失われた場合、最後の経過時間の更新が保存されなかったため、その時間が「戻って」返されることに注意してください。
  • 間隔 p はポリシー決定になります。理論的には、不合格のタイミングによっては、試験を完了するために余分な p を獲得することができます。p が 1 秒であれば、大したことではありません。5分なら大当たりです。もちろん、p の値が異なるとパフォーマンスのトレードオフがあります。また、ここではリアルタイム システムを扱っていないため、p に多少の偏りが生じる可能性があります。
  • すべてにトランザクションを使用します。システムが再開したとき (そしてグローバル クロックが再び動き始める前)、中断されたすべてのトランザクションをロールバックする必要があります。
于 2012-08-06T03:02:52.310 に答える