我正在将我们的服务器和客户端代码从SignalR 1.1迁移到SignalR 2.0.2。大多数服务器/客户端代码保持不变,但升级到最新版本导致接收消息的速度变慢。为了比较,我使用SignalR 1.1 .NET 4.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();
我们在响应系统中使用SignalR,它具有.NET客户端和JS客户端。消息的典型流程是JS客户端发送响应,然后服务器将其传播到.NET客户端,然后.NET客户端将ack发送回服务器,该服务器将传播回原始的JS客户端。
将消息发送回单个JS客户端时,代码如下所示
System.Threading.Tasks.Task t = hubProxy.Invoke("SendToIndividual", json, connectionId).Wait();
所以我使用fiddler来看看这些版本的SignalR .NET 4.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
使用SignalR 2.0.2客户端,序列如下所示:
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会话计时器来验证消息的时间。 (我想发布图片,但我没有足够的声誉来发布图片。)
ServerGotRequest GotResponseHeaders
13:48:52:265 13:49:05.235 POST /signalr/poll?transport=longPolling&connectionToken=KK4Nkpe%2BG0
13:49:05.256 13:49:33.196 POST /signalr/poll?transport=longPolling&connectionToken=KK4Nkpe%2BG0
13:49:05.274 13:49:05.277 POST /signalr/send?transport=longPolling&connectionData=%5B%7B%22Name
13:49:33.199 13:50:00:972 POST /signalr/poll?transport=longPolling&connectionToken=KK4Nkpe%2BG0
13:49:33.206 13:49:33.219 POST /signalr/send?transport=longPolling&connectionData=%5B%7B%22Name
查看时间戳时,似乎一切都井然有序,但是小提琴手以不同的方式记录它。谁能指出我做错了什么?感谢。