0

私はASP.NETMVC3でソーシャルネットワークを開発しています。すべてのユーザーは、接続された人々を見ることができる必要があります。

これを行うための最良の方法は何ですか?

Contactデータベースのテーブルにフラグを追加しtrue、ユーザーがログインしたときにフラグを設定し、ユーザーがログアウトしたときにフラグを設定しfalseました。

ただし、このソリューションの問題は、ユーザーがログアウトせずにブラウザーを閉じても、接続されたままになることです。

4

1 に答える 1

3

ユーザーが現在接続されていることを本当に知る唯一の方法は、ユーザーとサーバーの間の何らかの接続を維持することです。2つのオプションがすぐに思い浮かびます。

  1. javascriptを使用して、ajaxを使用してサーバーを定期的に呼び出します。サーバー上に「最終接続時間」ステータスを更新するために使用される特別なエンドポイントがあり、ユーザーがオンラインであるかどうかを確認するための2番目のエンドポイントがあります。
  2. WebSocketを使用して、サーバーとの永続的な接続を維持します

オプション1は、実装がかなり簡単なはずです。これによりサーバーに着信するリクエストの量が増えることに注意してください。これにより生成される可能性のあるトラフィックを処理するには、それに応じて計画を立てる必要があります。javascriptタイマーがサーバーにコールバックする頻度を設定することで、サーバーの負荷量をある程度制御できます。

ライブラリのサポートなしでこれを行った場合、オプション2はもう少し複雑になる可能性があります。もちろん、SignalRなど、これを非常に簡単に実行できるライブラリがあります。各ユーザーは永続的な接続を維持するため、これはサイトのパフォーマンスにも影響を与えます。このアプローチの利点は、オプション1のようにポーリングの必要性が減ることです。このアプローチを使用すると、ユーザーBがオフラインになったというメッセージをユーザーAにプッシュすることも非常に簡単になります。

本当に簡単な3番目のオプションについても言及する必要があると思います。あなたのサイトがかなりインタラクティブであると感じたら、彼らがあなたのサイトに最後にリクエストをした時間を追跡することができます。もちろん、これでは、ユーザーが「接続」されているかどうかを判断するのに十分な精度が得られない場合があります。

于 2012-11-01T12:23:35.103 に答える