[英]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.