StatusUpdateHub という SignalR ハブがあります。このハブは、HubClient と呼ばれる .NET クライアントによって更新されます。このクライアントは (本番環境では) さまざまなトランザクションのために複数のユーザーによって毎秒約 1000 回呼び出されます。クライアントコードは次のとおりです。
public static class HubClient
{
private static readonly string statusUpdateUrl = ConfigurationManager.AppSettings["StatusUpdateUrl"];
private static readonly HubConnection connection = new HubConnection(statusUpdateUrl);
private static readonly IHubProxy hub = connection.CreateProxy("StatusUpdateHub");
internal static void UpdateBrowser(long transactionId)
{
connection.Start().ContinueWith(task => hub.Invoke("UpdateTransactionStatus", transactionId)).ContinueWith(task =>
{
if (task.IsFaulted && task.Exception != null)
{
// log error
}
});
}
}
このコードが 100 人の同時ユーザーで呼び出されると正常に動作しますが、同時ユーザー数を 250 に増やすと、次のエラーが表示されます。
UpdateBrowser の予期しないエラー: System.InvalidOperationException: 接続が確立されていません。SignalR.Client.Connection.SignalR.Client.IConnection.Send[T](文字列データ) で SignalR.Client.Hubs.HubProxy.Invoke[T](String メソッド、Object[] args) で SignalR.Client.Hubs。 HubProxy.Invoke(String method, Object[] args) at Application.Services.HubClient.<>c_ DisplayClass2.b _0(Task task1) in c:\Build\Work\Application\Services\HubClient.cs:line 20
at System .Threading.Tasks.Task`1.InvokeFuture(Object futureAsObj)
で System.Threading.Tasks.Task.Execute()
コードをよりスケーラブルにする方法を教えてください。