7

背景:C#コードビハインドを使用して、非常にシンプルなチャットルームのようなASP.NETページを作成しています。現在のユーザー/チャットメッセージは、AJAX更新パネル内にあるコントロールに表示され、タイマーを使用して、数秒ごとにDBから情報を取得します。

「ログオフ」ボタンを押すのではなく、ユーザーがブラウザを終了するときにユーザーのステータスを「オフライン」に設定する簡単な方法を見つけようとしています。「オフライン」ステータスは現在、IsOnlineでは1文字(y / n)です。

これまで、Javascriptを使用してwindow.onbeforeunloadを調べ、このイベントの関数で非表示のフォーム変数を設定しました->もちろん問題は、コードでこの非表示のフォーム変数をテストする必要があることです-どこかで最終的なサーバー側DBクエリで、ユーザーを効果的にオフラインに設定します。

私はこのありそうな単純な問題を完全に難解にしているかもしれません!そしてもちろん、まったく異なる代替案をいただければ幸いです。

ありがとう

4

3 に答える 3

15

あなたは間違った木を吠えているのではないかと思います。ユーザーが突然インターネット接続を失ったり、ブラウザがクラッシュしたり、大きな赤いスイッチを使用してコンピュータの電源を切ったりする可能性があることを忘れないでください。サーバーがブラウザから二度と聞こえない場合があります。

これを行う最良の方法は、「デッドマンスイッチ」を使用することです。彼らは数秒ごとにデータベースから情報を取得していると言ったので、その機会を利用して、特定のクライアントから最後に聞いたときのタイムスタンプを(データベースに)保存します。

毎分かそこらで、サーバー上でクエリを実行して、数分間ポーリングしていないクライアントを見つけ、ユーザーをオフラインに設定します...すべてサーバー上で。

于 2009-02-10T03:54:34.027 に答える
2

ここでジョエルにしか同意できません。HTTPエージェントがいつ会話を終了したいかを知るための信頼できる方法はありません。

于 2009-02-10T04:00:11.237 に答える
2

Javascriptは、ブラウザを異常終了させることで閉じることができるため、信頼できません。

より信頼性の高い方法は、ブラウザからサーバーに定期的に「こんにちは、私はまだ生きています」というメッセージを送信し、サーバーがこれらのメッセージの受信を停止したときにステータスを変更することです。

于 2009-02-10T03:55:00.563 に答える