【发布时间】: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 的这种行为让我困扰了一段时间,有人可以向我解释发生了什么吗?
【问题讨论】: