SignalR のパフォーマンスをテストして、ソフトウェアに使用できるかどうかを確認するためのプロトタイプを作成しました。そのプロトタイプでは、PersistentConnection と HubConnection を介してクライアントにデータを転送する両方をテストしました。
当社のストレステストは、次の 3 つのコンポーネントで構成されています。
- ハブに登録してメッセージをサブスクライブする 1 つの「クライアント」
- メッセージの受信と転送を担当する 1 つのハブ (セルフホステッド)
- 各スレッドがハブを介してクライアントに 1000 個のメッセージを送信する 5 つのスレッドを含む 1 つの「ドライバー」
PersistentConnection はかなり安定して動作しますが、HubConnection では、ハブ内に多数のスレッドがあり、数百パケットごとに長い遅延 (1 ~ 10 秒の間で変化) があることに気付きました。遅延は主にハブ内で発生します (また、ハブとクライアントの間でも発生します)。また、「ドライバー」からハブへの配送にもわずかな遅延があります。遅延とは、ハブへのメソッド呼び出しが (ドライバーで) 遅延を返すこと、またはクライアントの受信メソッド呼び出しがかなり後で呼び出されることを意味します。時々、いくつかのメッセージが失われます (クライアントに配信されません)。
それはどこから来るのでしょうか?これは既知のバグですか? 微調整できるオプションはありますか? リクエストに応じて提供できる実用的な例として、完全なソリューションがあります。
Thxアレックス