1

SignalR と Redis を使用して、フェールオーバー環境を備えたスケールアウトをセットアップします。最初のステップは、Redis が SignalR ノード間の通信を処理していることを確認することです (現在の問題)。これに続いて、Redis Sentinel と BookSleeve を接続して、SignalR ノードが単一の Redis エンドポイントにアクセスできるようにします。

@mirajavora は、彼の記事Scaling SignalR with Redisで、単一インスタンスの Redis 環境をセットアップする方法を説明しています。

テストのために (これは最終的には *nix ボックスに常駐しますが)、Windows に Redis をセットアップしました。サーバーが起動し、Redis メッセージ バスを使用するように SignalR アプリケーションを構成しました。

Redis を実行せずにアプリを実行することで、SignalR アプリケーションが Redis を使用していることを確認しました。次のような予想されるエラーが表示されます。

ターゲット マシンがアクティブに拒否したため、接続できませんでした 127.0.0.1:6379

次に、Redis を起動し、SignalR アプリ プールをリサイクルします。

次の URL を使用して、SignalR アプリが Redis と通信していることを確認しました。

newsfeedlocal1:8082/signalr?transport=longPolling&connectionId=7285d6e5-412c-4bca-9897-5f9ab1ebcece&connectionData=%5B%7B%22name%22%3A%22newsfeedhub%22%7D%5D&messageId=B%2C0%7CF%2C2%7CG%2C0 %7CH%2C0&tid=5&callback=jQuery17204961678246036172_1357588747275&_=1357588762433

Redis の状態:

Redis 承認済み接続

これまでのところとても良いです... アプリケーションは期待どおりに動作します。

Mira の記事の終わり近くで、Global.asax に次の行がありますが、これは他のドキュメントにはありません。

RouteTable.Routes.MapConnection("エコー", "エコー/{*操作}");

SignalR プロジェクトに DistributedConnection オブジェクトがなく、これを除外しました ( GitHub のドキュメントに表示されていないためです。この行についてさらに説明はありますか?

Mira の記事では、ローカルでテストするワーカー プロセスの最大数を増やすことを提案しています。これを 1 以外の数値に設定すると、ノード間の通信が切断されます。クライアント 1 は、接続されたクライアント 2 に通知するアクションを実行します。ウィンドウ 1 は、ウィンドウ 2 でクライアント 2 に通知を送信します。

複数のワーカー プロセスが表示されますが、どういうわけか、これは良いテスト シナリオではないと思います。Fiddler を開いていますが、この問題をさらにデバッグするために何を探すべきかわかりません。また、このようなテストは実際に複数の SignalR ノードを適切にシミュレートしますか?

現在、ロードバランサーなしでこれをテストしています。推奨されるソフトウェア ロード バランサーはありますか?

4

0 に答える 0