我在集线器中使用SignalR 0.5.3,并明确地将传输设置为长轮询,如下所示:
$.connection.hub.start({ transport: 'longPolling' }, function () {
console.log('connected');
});使用这样的配置(在global.asax.cs Application_Start方法中):
GlobalHost.DependencyResolver.UseRedis(server, port, password, pubsubDB, "FooBar");
GlobalHost.Configuration.DisconnectTimeout = TimeSpan.FromSeconds(2);
GlobalHost.Configuration.KeepAlive = TimeSpan.FromSeconds(15);然而,长轮询似乎既不适用于开发(IIS express),也不适用于生产(IIS 7.5)环境。连接似乎是正确的,但是长轮询请求总是超时(大约2分钟后),然后再重新连接。IIS的日志是这里。来自第一个超时请求的响应:
{"MessageId":"3636","Messages":[],"Disconnect":false,"TimedOut":true,"TransportData":{"Groups":["NotificationHub.56DDB6692001Ex"],"LongPollDelay":0}}超时的重新连接响应如下所示:
{"MessageId":"3641","Messages":[],"Disconnect":false,"TimedOut":true,"TransportData":{"Groups":["NotificationHub.56DDB6692001Ex"],"LongPollDelay":0}}我希望在这个问题上有任何帮助。谢谢。
编辑
如果重新连接意味着一个新的长轮询周期的开始,那么当在KeepAlive中的global.asax.cs设置设置为15秒时,为什么在~2分钟之后启动它呢?这方面的问题是,我在IIS前面有一个反向代理,超时使25秒后的请求保持活动,因此当达到反向代理超时时,我得到504响应。
发布于 2012-10-20 21:53:48
看看这篇文章:signalr是如何内部工作的。长拉的工作方式是在设定的时间后,连接将超时或接收响应和重拉(重新连接)。
发布于 2021-06-25 09:21:36
长轮询时禁用“保持活动”功能。似乎用的是ConnectionTimeout。
此设置表示在关闭传输连接和打开新连接之前打开并等待响应的时间。默认值为110秒。
如果请求超时,而服务器没有发送任何数据,但您希望它发送,则可能是服务器端出现了一些您尚未看到的问题。
https://stackoverflow.com/questions/12991597
复制相似问题