SignalR、Redis バックプレーン、および単一のサーバーで動作する次のハブ フラグメントがあります。
パブリック抽象クラス HubBase : ハブ { private readonly static ConnectionMapping Connections = new ConnectionMapping(); public override Task OnConnected() { Connections.Add(Context.User.Identity.Name, Context.ConnectionId); base.OnConnected() を返します。 } }
接続しているユーザーを静的変数に保存しているので、connectionId をユーザー名にマップし、後で特定のユーザーにメッセージを送ることができます。
私の質問は、SignalR ファーム内のすべてのサーバーで OnConnected 関数が呼び出されるかどうかです。私はそれをテストしましたが、その外観から、クライアントが接続するサーバーでのみ呼び出されます。
すべてのサーバーで呼び出されない場合、そのようなシナリオを処理するための推奨される方法は何ですか?
編集:これについて考えると、サンプルコードに重大な欠陥がある可能性があることに気付きました。OnConnected メソッドが別のサーバーでも呼び出された場合、呼び出しに伴う要求がないため、明らかに Context.User.Identity.Name は設定されません。この問題を解決する唯一の方法は、グループを使用することだと思います。