現在、非常におしゃべりで、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 を起動しました。
何かご意見は?