4

私が関与しているアプリケーション用に簡単なレコード ロックを開発することを考えていました。レコードの編集を完了するのに文字通り何時間もかかるユーザーが何人かいます。これにより、他の誰かがレコードを変更したい場合に問題が発生します。現在、関連するロックはありません。

レコードは AJAX リクエストを介して保存されるため、私の場合、楽観的ロックが信頼できるかどうかはわかりません。ある種の悲観的ロックの適用を検討しています。locked_user_idlocked_timestampなどの 2 つのフィールドを使用して、レコードを開いているユーザーと最後に開いた時刻を追跡できます。

しかし、ユーザーは一度に何時間も開いている可能性があるため、ユーザーがそれを放棄したのか、それとも一生懸命取り組んでいるのかをどうやって知ることができますか? 5分ごとに更新するように強制したくありませんが、それは可能かもしれません(AJAXは5分ごとに保存します)。

おそらく、ユーザーが作業している間、jQuery プロセスがカウントし、5 分ごとに AJAX リクエスト (getJSON) を起動して、locking_timestamp を更新する可能性があります。そうすれば、誰がレコードに取り組んでいるかを維持できます。タイムスタンプが「古く」なった後、ユーザーはレコードを使用しなくなったと推測できます。この種のロックを経験した人はいますか?

4

3 に答える 3

3

Locking_timestamp を AJAX リクエストで更新することは優れた戦略であり、問​​題なく機能します。

ただし、通話の間隔が 5 分間というのは、私には少し長いように思えます。トラフィックが非常に多い場合を除き、ユーザーの観点からは 30 秒程度が適切です。別のユーザーがレコードを開いてブラウザを閉じたため、誰かが 5 分間待たなければならないことを想像してみてください...

于 2013-02-21T21:23:36.393 に答える
1

ユーザーがレコードを送信するまでに数時間かかる可能性があるとしたら、単純な 5 分間のロックなどでは十分ではありません。

代わりに、レコードの編集時にアクティブ化 (チェックアウト) され、一定の間隔で「保持」され、レコードが編集されたときに非アクティブ化 (チェックイン) される、一種のチェックイン/チェックアウト機能を実装してみませんか?保存された/セッションが期限切れになった/ブラウザが閉じられた/など

于 2013-02-21T21:46:45.423 に答える
1

ばかげているかもしれませんが、jQuery でページ上のマウスとキーボードのイベントを監視するのはどうですか。

PHP は、ファイル システムのどこかにロックを配置するか、データベース エントリに何らかのフラグを設定します。そのため、次のユーザーは情報を編集することはできず、情報を表示することしかできません。ファイルにはエントリにユーザー情報が含まれているため、変更が送信されると、彼の変更のみが受け入れられます

最初のユーザーがページでアクティビティを行っている間は、何も起こりません。ユーザーが何もせずに 3 分間経過すると、ユーザーはまだ作業中であるか、3 分以内に現在の変更を失うかを確認するよう求められます。彼が何も起こらないことを確認すると、Ajax はロックを解除します。

于 2013-02-21T21:34:18.830 に答える