我们有一个名为 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](String data) 在 SignalR.Client.Hubs.HubProxy.Invoke[T](String method, 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()
让我们知道如何使代码更具可扩展性?