4

現在、非常におしゃべりで、Singleton でサポートする必要があるアプリがあります (以下のコードを参照)。SignalR 2.0 にアップグレードし、アップグレード ガイドに従いましたが、それを環境にデプロイした後、すべての「プロトコル」に対するすべての要求が失敗し、シグナルが壊れることがあり、壊れていない場合はプッシュが非常に遅くなりますサーバーからクライアントへの通知、おそらくこれは長いポーリングを使用して何か関係があるのでしょうか? サーバー側のコードは次のようになります。

Owin スタートアップ クラスの設定方法

 var hubConfig = new HubConfiguration();
 hubConfig.EnableDetailedErrors = true;
 GlobalHost.DependencyResolver.UseSqlServer(ConfigurationManager.AppSettings["ConnectionString"].ToString());
 app.MapSignalR(hubConfig);

ご覧のとおり、SQL バックプレーンを使用しています。これが私のハブの外観です

public class MyHub : Hub
{
    public void JoinGroup(int someId)
    {
        Groups.Add(Context.ConnectionId, someId.ToString());
    }

    public void LeaveGroup(int someId)
    {
        Groups.Remove(Context.ConnectionId, someId.ToString());
    }
}

ここでもう 1 つのポイントは、グループを使用していることです。これは問題の一部である可能性があります。通知をプッシュした後、シグナルがグループのすべてのユーザーが終了するのを待っているかのように、グループが物事を遅くしているように見えることに気付きました。私のシングルトンはこんな感じです。

public class Broadcaster
    {
        private readonly static Lazy<Broadcaster> _instance =
            new Lazy<Broadcaster>(() => new Broadcaster(GlobalHost.ConnectionManager.GetHubContext<MyHub>().Clients));
        private IHubConnectionContext _context;
        private Broadcaster(IHubConnectionContext context)
        {
            _context = context;
        }
        public static Broadcaster Instance
        {
            get { return _instance.Value; }
        }
        public void UpdateClient(int someId, int moreInfo)
        {
            _context.Group(someId.ToString()).Update(someId, moreInfo);
        }
    }

最後に、これらはクライアントのログからの出力です。

  • 16:37:25 GMT-0600 (中央標準時)] SignalR: クライアントがハブ 'myhub' にサブスクライブしました。16:37:25 GMT-0600 (中央標準時)] SignalR: '/api/signalr/negotiate?connectionData=%5B%7B%22name%22%3A%22myhub%22%7D%5D&clientProtocol=1.3' でネゴシエートしています。
  • 次に、SSE エンドポイントへの接続を試みますが、失敗します...
  • 16:37:30 GMT-0600 (中央標準時)] SignalR: このブラウザは SSE をサポートしており、Forever Frame をスキップします。
  • 16:37:31 GMT-0600 (中央標準時)] SignalR: 長いポーリング要求を開始しています...
  • 16:37:35 GMT-0600 (中部標準時)] SignalR: 接続しようとしたときに longPolling がタイムアウトしました。
  • 16:37:35 GMT-0600 (中央標準時)] SignalR: xhr 要求が中止されました。

    (ハブでのサブスクライブからのエラー) SignalR エラー: エラー: トランスポートを正常に初期化できませんでした。自動初期化に別のトランスポートを指定するか、まったく指定しないでください。

  • 16:37:35 GMT-0600(中部標準時)] SignalR: 接続を停止しています。
  • 16:37:35 GMT-0600 (中央標準時)] SignalR: ajax abort async = true を起動しました。

何かご意見は?

4

1 に答える 1