升级到SignalR 2.0.2后,.NET 4.0客户端速度变慢

升级到SignalR 2.0.2后,.NET 4.0客户端速度变慢,signalr,signalr.client,Signalr,Signalr.client,我正在将服务器和客户端代码从Signalr1.1迁移到Signalr2.0.2。大多数情况下,服务器/客户端代码保持不变,但升级到最新版本会导致接收消息的速度变慢。为了进行比较,我将Signalr1.1.NET4.0客户端与使用最新(2.0.2)SignalR库的服务器一起使用,在这种配置下,我看不到慢 .NET客户端代码如下所示 hubConnection = new HubConnection(uri, "sessionCode=" + sessionCode); hubProxy = hu

我正在将服务器和客户端代码从Signalr1.1迁移到Signalr2.0.2。大多数情况下,服务器/客户端代码保持不变,但升级到最新版本会导致接收消息的速度变慢。为了进行比较,我将Signalr1.1.NET4.0客户端与使用最新(2.0.2)SignalR库的服务器一起使用,在这种配置下,我看不到慢

.NET客户端代码如下所示

hubConnection = new HubConnection(uri, "sessionCode=" + sessionCode);
hubProxy = hubConnection.CreateHubProxy("SessionHub");
hubProxy.On<string>("onMessageReceived", HandleWebMessageReceived);
hubConnection.Start(new Microsoft.AspNet.SignalR.Client.Transports.LongPollingTransport()).Wait();
System.Threading.Tasks.Task t = hubProxy.Invoke("SendToIndividual", json, connectionId).Wait();
因此,我使用fiddler来查看这些版本的SignalR.NET4.0客户端之间的区别。为了简洁起见,我将发布部分请求头

对于SignalR 1.1客户端,序列如下所示:

POST /signalr/poll?transport=longPolling&connectionToken=UAcJHRiStwmX%2BXQ
POST /signalr/send?transport=longPolling&connectionToken=UAcJHRiStwmX%2BXQ
POST /signalr/poll?transport=longPolling&connectionToken=UAcJHRiStwmX%2BXQ
POST /signalr/send?transport=longPolling&connectionToken=UAcJHRiStwmX%2BXQ
POST /signalr/poll?transport=longPolling&connectionToken=KK4Nkpe%2BG0
POST /signalr/poll?transport=longPolling&connectionToken=KK4Nkpe%2BG0
POST /signalr/send?transport=longPolling&connectionData=%5B%7B%22Name
POST /signalr/poll?transport=longPolling&connectionToken=KK4Nkpe%2BG0
POST /signalr/send?transport=longPolling&connectionData=%5B%7B%22Name
对于SignalR 2.0.2客户端,序列如下所示:

POST /signalr/poll?transport=longPolling&connectionToken=UAcJHRiStwmX%2BXQ
POST /signalr/send?transport=longPolling&connectionToken=UAcJHRiStwmX%2BXQ
POST /signalr/poll?transport=longPolling&connectionToken=UAcJHRiStwmX%2BXQ
POST /signalr/send?transport=longPolling&connectionToken=UAcJHRiStwmX%2BXQ
POST /signalr/poll?transport=longPolling&connectionToken=KK4Nkpe%2BG0
POST /signalr/poll?transport=longPolling&connectionToken=KK4Nkpe%2BG0
POST /signalr/send?transport=longPolling&connectionData=%5B%7B%22Name
POST /signalr/poll?transport=longPolling&connectionToken=KK4Nkpe%2BG0
POST /signalr/send?transport=longPolling&connectionData=%5B%7B%22Name
/signalr/poll表示我们从服务器接收到数据(来自JS客户端的响应),/signalr/send表示我们发送回ack

从上面的日志来看,在确认第一条消息之前,我们似乎收到了另一个响应。因此,我在fiddler上添加了ServerGotRequest和GotResponseHeader会话计时器,以验证消息的计时。(我想发布一张图片,但我没有足够的声誉来发布图片。)


查看时间戳时,似乎一切正常,但fiddler的记录方式不同。有人能指出我做错了什么吗?谢谢。

是否需要长轮询?你比较过使用WebSocket的性能吗?我们的windows应用程序是用.NET 4.0构建的,当我没有指定任何传输时,它将使用SSE,但速度仍然很慢。我还使用.NET4.5和signalr客户端构建了我们的应用程序,但速度仍然很慢。它们都表现出相同的症状。我也在服务器和JS客户端上调试了这一点,当JS客户端发送响应,.NET客户端发送ack时,ack消息几乎在瞬间到达JS客户端,但是.NET客户端上的调用需要一段时间才能完成。是不是刚开始连接,速度变慢了?如果是这样,您能否将SessionHub.onConnect方法添加到问题中?发送到2.0.2客户端的第一个/poll响应很可能是一条消息,向客户端指示在服务器上已完成OnConnected。在收到此消息之前,当我移动在MessageReceived
hubProxy.On(“onMessageReceived”,HandleWebMessageReceived)上执行的代码时,2.0.2客户端将无法完成从hubConnection.Start.Oh返回的任务到另一个线程,它又快了。