1

データベースにロック フラグを設定して、他のユーザーが同じページを表示できないようにするアプリケーションを持っています。

ただし、一度設定すると、「設定を解除」する方法がわかりません。ユーザーにフラグの設定を解除してもらうこともできますが、それは不要なようです。

ページを離れてデータベースを呼び出し、ページのロックを解除するブラウザを単純に探したいと思います。

JSF / Javascript / jQuery(すべてのオプション)を使用して、この「タイプ」(正確な方法を探していない)をどのように行うのですか

4

2 に答える 2

2

とにかく私が見た、これを行うための信頼できる方法は本当にありません。

ブラウザーのonbeforeunloadイベントを使用して、サーバーに「今ページを離れます」と伝えることができます。問題は、ページのアンロードを実際にブロックできないことです。ユーザーが実際にブラウザを閉じている場合、開いているソケットはすぐに閉じられます。Web サーバーは、要求を時間内に取得する場合と取得しない場合があります。このアプローチでは、非常に不安定な結果が得られました。

有効なアプローチの 1 つは、ある種のタイムアウトメカニズムを採用することです。ページは 30 秒ごとにサーバーに ping を送信し、「私はまだここにいます」と言っています。数分経ってもサーバーがこの更新を取得しない場合、セッションが無効になり、そのドキュメントが解放されます。おそらく、これは、新しい人がやってきたときに最後のpingをチェックすることで最適化できます. これに関する 1 つの問題は、誰かがページを離れた場合、次のユーザーがページに移動する前に 1 ~ 2 分待たなければならない可能性があることです。次に、サーバーにトラフィックが殺到しないだけでなく、次のユーザーが長時間待たされることのない ping 頻度を見つける必要があります。

これら 2 つの方法を組み合わせることも可能です。ユーザーがページを離れると、onbeforeunloadイベントをトラップし、すぐにセッションを無効にします。ただし、これが機能しない場合は、1 分間 ping を受信しないとセッションがタイムアウトになります。

より良い解決策はありますか?

Web アプリでドキュメントをロックして、複数のユーザーが編集できないようにする必要がある場合は、全体的な設計を調査することをお勧めします。ユーザーがデータを破壊することを恐れていますか? その場合は、マージの競合を解決できるメカニズムを採用するか、両方の変更セットを組み合わせることができるかどうかを検出してください。

真の Web 2.0 に移行したい場合は、Google Docs に似たものを設計して、変更が行われたときにライブで表示されるようにすることができます。どこにも保存ボタンは必要ありません!

于 2013-07-19T20:34:26.660 に答える
0

「キープアライブ信号」を送信することはオプションかもしれません。セッションCookieと組み合わせた、フロントエンド側のこれらの線に沿ったもの。

setInterval(function() {
  var img = new Image();
  var src = "http://examle.com/keepalive.gif?cachebuster=" + 
      Math.ceil(Math.random() * 10000 );
}, 1000);
于 2013-07-19T20:33:25.927 に答える