每个客户端的最大websocket连接数

时间:2014-06-12 18:17:25

标签: websocket signalr signalr-hub signalr.client

我正在开发一种工具,使用Signal R Client HUB API加载测试我的signalR应用程序。

我想针对10K客户端在websockets上测试我的应用程序行为。

问题是我的工具在一定数量的连接后无法创建新连接。它可以创建的最大连接数仅在2000-3000范围内。

我无法弄清楚这背后的原因是什么。我检查了服务器端,发现​​没有问题。服务器能够在之后响应浏览器客户端。

登录工具的错误是:

System.Net.WebSockets.WebSocketException (0x80004005): Unable to connect to the remote server ---> System.Net.WebException: The remote server returned an error: (503) Server Unavailable.
   at System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult)
   at System.Threading.Tasks.TaskFactory`1.FromAsyncCoreLogic(IAsyncResult iar, Func`2 endFunction, Action`1 endAction, Task`1 promise, Boolean requiresSynchronization)
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at System.Net.WebSockets.ClientWebSocket.<ConnectAsyncCore>d__0.MoveNext()
   at System.Net.WebSockets.ClientWebSocket.<ConnectAsyncCore>d__0.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNet.SignalR.Client.Transports.WebSocketTransport.<PerformConnect>d__2.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNet.SignalR.Client.Transports.WebSocketTransport.<DoReconnect>d__9.MoveNext()

有时,当websocket客户端增加到1700或有时甚至更多时,此工具会挂起。

此工具是.NET 4.5 Windows应用程序。我正在点击的signalR服务器也在同一个网络上。

我在signalR服务中执行某些方法。一种方法是将输入数据从客户端传递到服务器,另一种方法是客户端订阅以从服务器接收数据。

此外,我从不同的机器测试了此工具,它可以生成分布式负载,但我不想运行该工具的多个实例。我的问题是为什么单个实例无法为我的信号R服务生成批量websocket请求?

1 个答案:

答案 0 :(得分:0)

再解释一下你在测试中做了什么,以及执行客户端和服务器的位置。

如果您不停地发送消息,可能您可能已经使信道饱和。连接开始失败时,NIC的吞吐量是多少?什么是CPU使用率?也许你的客户或你的服务器无法获得如此多的数据。

您是否尝试并行运行两个客户端?也许问题是您的客户端,无法正确处理这些数量的连接。

<强>更新

您应该使用某种形式的线程来创建多个并行连接,并在测试期间保持它们的活动状态。请查看我用于执行性能测试的WebSocket echo load generator,并按照创建SignalR负载生成器的方法进行操作。