SignalRはこのシナリオをサポートしていますか?
はいサポートされており、ライブ通知に適しています。
groupsを使用して、接続されたクライアントの指定されたサブセットにメッセージをブロードキャストできます。しかし、感覚データにグループを使用しないでください。
接続されたクライアントはtrack/mapになり、connectionId/connectionIdsによって特定のユーザ/ユーザ通知にメッセージを送信することができます。
私たちがパフォーマンスに来るなら、20000人の同時接続(私は同時に並んでいる)が本当にたくさんあります。まず、change IIS configurationを使用して、5000を超える同時リクエストをサポートする必要があります。
optimize signalr for performanceです。メッセージサイズは小さくする必要があります。メッセージあたりの最大値は4Kbです(これは多くの同時接続数を減らすためです)。
SignalrはJson
を使用するので、JsonProperty
を使用してメッセージサイズを減らすことができます。
[JsonProperty("op")]
public decimal OrderPrice
なぜメッセージサイズが重要なのですか?すべての接続にはサーバ側のバッファがあるためです。クライアントが1つのメッセージを得ることができるが、その時点でサーバが2つのメッセージを送信すると、メッセージはバッファに書き込まれる。これらのバッファはメモリを使用します。したがって、20000件の同時接続ではさらに慎重に作業する必要があります。さもなければ、あなたはメモリ消費に苦しんでいます。
ただし、メッセージサイズが不十分な場合でも、このバッファ制限を減らす必要があります。
DefaultMessageBufferSize:デフォルトでは、SignalRは、接続ごとにハブあたり メモリに1000件のメッセージを保持します。大きなメッセージが使用されている場合は、この はこの 値を小さくすることによって軽減することができるメモリの問題を作成することができます。この設定は、ASP.NETアプリケーションで、またはOWIN スタートアップクラスの設定方法で自己ホスト型アプリケーションでのApplication_Startイベントハンドラ に設定することができます。次のサンプル が使用されているサーバー メモリの量を削減するために、アプリケーションのメモリ フットプリントを削減するために、この値を小さくする方法を示しています。
public class Startup
{
public void Configuration(IAppBuilder app)
{
// Any connection or hub wire up and configuration should go here
GlobalHost.Configuration.DefaultMessageBufferSize = 500;
app.MapSignalR();
}
}
私はあなたがそれを100使用することをお勧めします。バッファー限界を下げることの欠点は何ですか?バッファがいっぱいになると、新しいメッセージが得られません。これは、クライアントがあなたの通知の一部を失うことを意味します。したがって、あなたの通知がトランザクションである場合(ユーザは受信しなければならない)、多くのバッファサイズを減らさないでください。しかし、そうでなければ、あなたは減らすことができます(Minumumは32でなければなりません)。
あなたは、サーバーとクライアントの両側にネット4.5以上の両方を使用する必要がありますし、あなたのクライアントがWebSocketのをサポートするためにwindows8以上が必要です。
した後、これらの手順を適用し、あなたのメモリ消費量を追跡し、messsagesのmesssageサイズ/バッファ制限/周波数を変更します。
ボーナス: 20000の同時要求はあまりにも多くのです。したがって、パフォーマンスの問題が発生した場合は、ロードバランサ/スケールアップとSignalr BackPlaneを使用することをお勧めします。そうです、あなたは1つのWebサーバーを持っていないでしょう.4つはそれぞれ平均5000の同時リクエストを持っています。サーバー上で1つのメッセージを送信すると、他のサーバー(クライアントも含む)がバックプレーンでメッセージを取得します。何が欠点ですか? connectionIdsを使用してユーザーを追跡/マッピングするには、共有リソース(例:データベース)を使用する必要があります。
あなたは(20.000ユーザー、WinFormsのにASP.NETプッシュ)シナリオのための***しようとした高パフォーマンスで***最終的な溶液を得たのですか?あなたは*共有する* _良いパターンと習慣_を望みますか? – Kiquenet