3

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 は設定されません。この問題を解決する唯一の方法は、グループを使用することだと思います。

4

1 に答える 1