问题描述
从页面调用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中的同一应用程序池中,这是其计时问题的原因。