【问题标题】:SignalR taking too much time during first loadSignalR 在第一次加载期间花费了太多时间
【发布时间】:2020-08-14 12:37:13
【问题描述】:

从页面调用 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(客户端)的进一步请求都没有被接受,我已经在 chrome 中检查了网络,所有请求都被移到待处理状态,只有在信号器连接建立后才被接受(这种情况是预期的吗?)

以下是 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

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

【问题讨论】:

    标签: c# asp.net signalr


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2016-03-01
      • 1970-01-01
      • 2017-06-02
      • 1970-01-01
      • 2017-02-15
      • 2020-07-23
      • 2013-07-11
      • 2014-01-13
      • 1970-01-01
      相关资源
      最近更新 更多