SignalR无法识别某些传输断开连接

时间:2014-04-18 18:09:02

标签: signalr

我注意到在某些情况下,SignalR无法识别传输层的断开连接事件。如果正常断开传输,通过将VPN连接丢弃到服务器,或者发出ipconfig / release,将触发相应的事件。如果我连接到VPN并且我拔掉网络电缆或关闭无线网络,则SignalR无法识别出在VPN连接超时之前我们已断开连接。这是最可接受的,因为它最终实现了它。但是,如果我不使用VPN,只需拔下网络电缆或关闭无线网络,SignalR就不会识别出发生断开连接。这是在非CORS环境中通过WebSockets使用SignalR 2.0.1。如果我在集线器中启用日志记录,我会在等待超过5分钟后看到控制台中没有记录任何事件。在启动期间我在日志中看到的困扰我的一件事是:

SignalR: Now monitoring keep alive with a warning timeout of 1600000 and a connection lost timeout of 2400000. 

这是我的问题吗?我已尝试手动将GlobalHost.Configuration.DisconnectTimeout设置为30秒,但它不会更改此方案中的任何行为,也不会更改该日志语句。还有什么我可以在这里俯瞰?

编辑:我在fiddler中注意到我的协商响应的断开超时为3600,keepalive为2400,并且trywebsockets为false。这个特殊的服务器是2008 R2,我不相信支持Web套接字。这是否意味着将使用长轮询?我不会在小提琴手或控制台中看到任何长时间的轮询请求。

1 个答案:

答案 0 :(得分:1)

超时设置是我的问题。我不确定为什么我在调整设置时原本没有看到日志记录输出的变化,但我回到示例应用程序并看到事情发生了变化,现在情况正常。

应该注意,SignalR的默认设置在记录输出中产生以下语句,并且以毫秒为单位进行测量。

SignalR: Now monitoring keep alive with a warning timeout of 13333.333333333332 and a connection lost timeout of 20000

当您阅读以下页面中的传输断开方案下的信息时,这一点很明显:The default keepalive timeout warning period is 2/3 of the keepalive timeout. The keepalive timeout is 20 seconds, so the warning occurs at about 13 seconds.