2012-03-11 6 views
4

私たちはソーシャルネットワークアプリケーションに取り組んでおり、いくつかの新機能を実装しようとしています。 1.オンラインユーザーの追跡 2.チャット(1対1チャットとチャットグループチャット)オンラインユーザーとチャットを追跡するためのSignalR

私はSingalRを調べましたが、これは有望そうです。 ASP.NET MVC 3を使用しており、ハブを使用することを考えています。 私の質問は、SignalRがチャットのために単純なポーリングの代わりに優れているかどうかということですか?スケーラビリティに関しては何が良いでしょうか?私はSOに関する他の質問を見てきましたが、スケーラビリティに関してはどちらが優れているかを知ることはできませんでした。

2番目の質問は、SignalRを使用する場合、オンラインユーザーの追跡にも使用できるかどうかです。私は、各クライアントからのサーバー側の関数を "私はオンライン"と言っている一定の間隔で呼び出すことができ、ハブ方法では、DBのisOnlineビットを設定することができます。クライアントが切断されると、そのビットを設定解除することができます。これはうまくいくのでしょうか、それとも簡単なポーリングですか?単純なポーリングを使用すると、ユーザーをオフラインに設定するにはどうすればよいですか?

+0

SignalRを使用してオンラインユーザーを追跡する必要があるかどうかについてのヘルプはありますか。これは、より多くの接続が維持されることを意味する(オンラインユーザーを追跡する場合)、チャットを行うユーザーには、単にSignalRを接続する方がよい場合があります。これにより、接続数が減少します。オンラインユーザーを追跡するために、他の方法を使用する必要がありますか? – Gaurav

答えて

5

私は、種類のチャットアーキテクチャとしてもSignalRを使用しています。私たちの単一のIISサーバー設定を完全に動作させます。 this

var clients = Hub.GetClients<Type of your hub here>(); 

のように接続しているクライアントを照会することによってSclaing-out-SignalR

あなたはハブを使用している場合、あなたは「私はオンラインだ」問題を解決することができますし、各クライアントからのユーザーIDを要求: スケーラビリティのためにチェックしてください。接続が失われている場合は、DBのオンラインユーザーを探す必要があります。これはハブのクライアントではなくなります。

OR

別のアプローチは、ユーザからハブへの最初のメッセージとして、オンラインユーザーを設定することです。 "こんにちは、私はそこにいる"。 そして、切断イベントを処理するにthis solution

public class MyHub : Hub, IDisconnect 
{ 
    public Task Disconnect() 
    { 
     // Query the database to find the user by it's client id. 
     var user = db.Users.Where(u => u.ConnectionId == Context.ConnectionId); 
     return Clients.disconnected(user.Name); 
    } 
} 

を使用しています。

私はあなたにいくつかのアイデアを与えることができます。

+0

これは、私が質問で言及したのと同じ考え方です。ハブを呼び出してユーザーをオンラインに設定し、IDisconnectを実装してユーザーをオフラインに設定します。しかし、私はまだ、SignalRが単純なポーリングよりも優れているかどうかを知りたいです。当初、私たちは単一のIISから始めようとしていましたが、Webファーム(現在はサポートされていないことがわかっています)まで拡張する必要があります。しかし、1台のサーバーでは、1対1のチャットを期待できるユーザーは何人ですか? – Gaurav

1

DB接続に関連するネットワークトラフィックのため、SignalRはポーリングより優れています。また、signalRの最新バージョンが.net 4.5のみをサポートしているので、あなたのMVCプロジェクトで使用するsignalRのバージョンについて考えてください。

接続数は、メモリ容量とIISで設定した接続数によって異なります。あなたはまともなリグで簡単に1000+を扱うことができます。

Tomの答えと同様に、イベントをハブまたはシグナルRインターフェイスに傍受して、カウントを取得し、イベントを切断し、接続することができます。

関連する問題