SignalR在第一次加载时花费太多时间

问题描述

页面调用SignalR会花费太多时间。我查看了几乎所有有关传输的材料,甚至尝试过切换到一种机制,例如长池,中心问题,客户中心问题,但仍然没有运气。

集线器是一个远程类,它托管在IIS中,而客户端也托管在同一类中

下面是我给客户的代码

<script src='http://localhost:81/SignalRWebapp/signalr/hubs'></script>

$(function () {
    var tryingToReconnect = false;

    var messageHub = $.connection.messageHub;
    $.connection.hub.logging = true;

    messageHub.client.userLoggedIn = function (name,message) {
        console.log(name + ' ' + message);
    };

    messageHub.client.displayMessage = function (sender,message) {
        $("#searchNews").val(message);
    };

    
    $.connection.hub.start({
        jsonp: true,transport: 'webSockets'
    }).done(function () {
        // Wire up Send button to call NewContosoChatMessage on the server.
        console.log("Connected,transport = " + $.connection.hub.transport.name);
        
        $('#btnAdd').click(function () {
            var stringn = $("#searchNews").val();
            messageHub.server.sendMessage('ajsdh',stringn+"text");
        });
    }).fail(function (reason) {
        console.log("SignalR connection Failed: " + reason);
    });
});

这是中心代码

  public class MessageHub:Hub 
    {
        public void Login(string username)
        {
            // Notify all clients that a user is logged in
            Clients.All.userLoggedIn(username);
        }

        public async Task SendMessage(string sender,string message)
        {
            // display the new message by calling displayMessage on all connected clients
            var id = Context.ConnectionId;
            await Clients.All.displayMessage(sender,message);
        }
    }

启动类:

 public class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            app.MapSignalR(new HubConfiguration
            {
                EnableJSONP = true,EnableJavaScriptProxies = true,EnableDetailedErrors = true
            });
        }
    }

发生一个令人沮丧的问题,这是因为我的webapp(client)的其他请求均未被接受,我检查了Chrome中的Network,所有请求都移入了待处理状态,只有在建立了信号发送器连接后才被接受(这种情况是预期的吗?)

下面是signalR日志:

[17:48:35] SignalR: Client subscribed to hub 'messagehub'.
jquery.signalR-2.4.1.js:86 [17:48:35] SignalR: Negotiating with '/SignalRWebapp/signalr/negotiate?clientProtocol=2.1&connectionData=%5B%7B%22name%22%3A%22messagehub%22%7D%5D'.
jquery.signalR-2.4.1.js:86 [17:48:35] SignalR: Negotiating with '/SignalRWebapp/signalr/negotiate?clientProtocol=2.1&connectionData=%5B%7B%22name%22%3A%22messagehub%22%7D%5D'.
jquery.signalR-2.4.1.js:86 [17:48:35] SignalR: webSockets transport starting.
jquery.signalR-2.4.1.js:86 [17:48:35] SignalR: Connecting to websocket endpoint 'ws://localhost:81/SignalRWebapp/signalr/connect?transport=webSockets&clientProtocol=2.1&connectionToken...'.
jquery.signalR-2.4.1.js:86 [17:48:35] SignalR: Websocket opened.
jquery.signalR-2.4.1.js:86 [17:48:35] SignalR: webSockets transport connected. Initiating start request.

这是我的webapp(客户端)无法执行任何进一步的请求(卡住)之后发生的情况,因为此启动连接尚未实现。

现在过了一段时间,我得到了这些日志

[17:56:27] SignalR: The start request succeeded. Transitioning to the connected state.
jquery.signalR-2.4.1.js:86] SignalR: Now monitoring keep alive with a warning timeout of 13333.333333333332,keep alive timeout of 20000 and disconnecting timeout of 30000

我是这个主题的新手,信号器的这种行为现在困扰了我一段时间,有人可以向我解释发生了什么吗?

解决方法

解决了这个问题,尽管问题本身很棘手,但我已将所有应用程序(客户端,服务器,集线器应用程序)托管在IIS中的同一应用程序池中,这是其计时问题的原因。