問題タブ [signalr-backplane]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
354 参照

c# - SignalR スケールアウト クライアントからサーバーへのブロードキャスト

SignalR スケールアウトを使用して、クライアントからバックプレーンに接続されているすべてのサーバーにメッセージをブロードキャストするにはどうすればよいですか? デフォルトで動作するはずだと思っていましたが、メッセージを受信して​​いるのはサーバーのハブ 1 つだけです。

セットアップ: ロード バランサーの背後に 4 つの仮想マシンがあり、Redis バックプレーンで SignalR を使用しています。次のハブがあります。

クライアント側では、このメソッドを次のように呼び出しています。

メッセージ バスでトレースを有効にすると、すべてのサーバーでメッセージが受信されます。

ただし、Hub メソッドは 1 つのサーバーでのみ呼び出されます。この呼び出しで、すべてのサーバーで StartProcessing メソッドを実行するにはどうすればよいですか?

0 投票する
1 に答える
142 参照

signalr - SignalR Scaleout はメッセージを取得します

SignalR を使用しているチャット機能があり、SQL サーバー バックプレーンがあります。人々がチャットしているとき、メッセージは両方のサーバーに問題なく表示されます。ただし、ページを更新すると、明らかにチャット履歴が消えています。

そのため、人々が何かを言うと、それをメモリ内の辞書にキャッシュします。問題は、そのメッセージが他のサーバーのメモリにないため、誰かが更新して負荷分散された場合、そのメッセージは表示されないことです。

2 つのキャッシュの同期を維持できるように、サーバーとバックプレーンの間で発生しているイベントを取得するためにサブスクライブする方法はありますか?

ありがとう!

0 投票する
1 に答える
367 参照

redis - バックプレーン vs スティッキー ロード バランサー

SignalR アプリケーションを開発しています。ロード バランサーの背後にあるさまざまなサーバーでアプリケーションの複数のインスタンスが実行されます。バックプレーンについて読んだところ、主にサーバー障害の目的を果たし、複数のサーバー間の要求ホップを処理することがわかりました (別の利点があるかもしれません)。

以下のシナリオを検討し、まだバックプレーンが必要かどうかを提案してください。

スティッキー ロード バランシングを使用しています (つまり、クライアントからの後続の要求はすべて同じサーバーに送信されます)。そのため、適切なシナリオではリクエスト ホップが発生する可能性はありません。

サーバー ダウン シナリオの処理方法 - サーバーがダウンしたとき。クライアントは再接続を試み、「404-not found」エラーを取得します。この時点で、クライアントは新しい接続を開始し、機能します。

0 投票する
0 に答える
232 参照

signalr - コンソール アプリケーションまたはワーカー ロールで Redis スケールアウト バックエンドで SignalR を使用する方法を教えてください。

Redis スケールアウト (とされる) とハブで SignalR を使用する Web アプリがあり、正常に動作します。接続されているすべてのクライアントにメッセージを送信できるようにするには、worker ロールが必要ですが、その方法がわかりません。また、ワーカーが定期的に実行するメソッドをすぐに実行するテスト アプリとして機能するコンソール アプリケーションもあります。

ワーカー アプリまたはコンソール アプリ内で Web サーバーをホストするのは奇妙に思えますが、これまでのところ、ほとんどの場合はそうでした。Web アプリとの会話も奇妙に思えます。メッセージを Redis に投稿するだけで、すべてのサブスクライバーがそれを受け取ることができるはずではありませんか?

これは私が使用しているコードです。UseRedis呼び出しとhandleExecutedActionほとんどそのままの内容を Web アプリからコピーしました。スローも何もしませんが、メッセージは Web クライアントに届きません。

このページを見つけた後、このメソッド (コンテキスト) を使用しました。他のメッセージは Web アプリから送信され、コンソール アプリからは何も送信されないため、クライアントが機能していることはわかっています...

0 投票する
1 に答える
761 参照

c# - チャット シナリオ用の Azure を使用した SignalR スケールアウト

チャット アプリケーションの場合、SignalR を備えた Azure アーキテクチャを使用し、SignalR サーバーとして機能する Web ロールを使用します (メッセージはブロードキャスト タイプではなく、特定のユーザー/クライアントを対象としています)。

重いユーザー負荷を処理するために、Web ロールと共に SignalR サーバーをスケールアウトしたいと考えています。ただし、SignalR のドキュメントでは、より多くのユーザーが接続される (またはユーザー イベント駆動型のシナリオで) メッセージの数が増加するような場合に、バックプレーン (Redis、サービス バス) を使用して事前に焼き付けられた SignalR スケールアウト メソッドを使用することをお勧めしません。「クライアントからクライアントへ (例: チャット): このシナリオでは、メッセージの数がクライアントの数に比例して増加する場合、つまり、メッセージの速度がクライアントの数に比例して増加する場合、バックプレーンがボトルネックになる可能性があります。クライアントが参加します。」

質問: 各サーバー インスタンスまたはその他のスケールアウト ソリューションにメッセージをプッシュしない、このような高頻度のケース用のカスタム スケールアウト ソリューションを知っている人はいますか?

すでに SignalR のドキュメントと関連するビデオのあらゆる場所を調べましたが、「filtered-bus」という言葉以外は何も見つかりませんでした。これは、それが何であるか、どのように使用する必要があるかについて説明されていませんでした。