簡體   English   中英

SignalR 在首次加載期間花費太多時間

[英]SignalR taking too much time during first load

從頁面調用 SignalR 花費了太多時間。 我查看了幾乎所有有關傳輸的材料,甚至嘗試切換到一種機制,例如長池、集線器問題、客戶端集線器問題,但仍然沒有運氣。

集線器是遠程 class 托管在 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);
        }
    }

啟動 class:

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

由於這個原因發生了一個令人沮喪的問題,我的 webapp(客戶端)的進一步請求都沒有被接受,我已經檢查了 chrome 中的網絡所有請求都被移到待處理狀態,這些請求只有在 signalr 連接建立后才被接受(這是預期的情況?)

以下是 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(Client) 無法執行任何進一步的請求(Stuck),因為此啟動連接尚未完成。

現在過了一段時間,我得到了這些日志

[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 的這種行為現在困擾了我一段時間,有人可以向我解釋發生了什么嗎?

解決了它,雖然問題本身很棘手,但我已將所有應用程序(客戶端、服務器、集線器應用程序)托管到 IIS 的同一個應用程序池中,這就是其時間問題的原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM