SignalR在一段时间后停止工作
SignalR Stops Working After A While
由于某种原因,SignalR将在短时间(我估计大约1小时或更短)后停止调用客户端方法。我有一个显示警报的页面。。。一个非常简单的实现。这是Javascript:
$(function () {
// enable logging for debugging
$.connection.hub.logging = true;
// Declare a proxy to reference the hub.
var hub = $.connection.alertHub;
hub.client.addAlert = function (id, title, url, dateTime) {
console.log(title);
};
$.connection.hub.start().done(function () {
console.log("Alert Ready");
});
});
如果我刷新页面,它会再次工作大约一个小时,然后将停止调用客户端事件addAlert
。日志中没有错误,也没有警告。日志中的最后一个事件(除了对服务器的ping)是:
[15:18:58 GMT-0600(CST)]信号R:触发客户端集线器事件集线器"AlertHub"上的"addAlert"。
其中许多事件会在短时间内出现,然后停止,即使服务器应该仍在发送它们。
我在Mac和SignalR 2.0.0上使用的是Firefox 35.0.1。
我意识到解决方法是每隔10分钟左右强制刷新一次页面,但我正在寻找解决问题根本原因的方法。
我在服务器上启用了SignalR跟踪。在重新刷新"警报"页面后,我在服务器上创建了一个"警报",警报通过了。我等了大约10分钟,又试了一次,但没能成功。以下是日志中的内容(很抱歉过于冗长,不确定相关内容):
SignalR.Transports.TransportHeartBeat Information: 0 : Connection b8b21c4c-22b4-4686-9098-cb72c904d4c9 is New.
SignalR.Transports.TransportHeartBeat Verbose: 0 : KeepAlive(b8b21c4c-22b4-4686-9098-cb72c904d4c9)
SignalR.Transports.TransportHeartBeat Verbose: 0 : KeepAlive(b8b21c4c-22b4-4686-9098-cb72c904d4c9)
SignalR.Transports.TransportHeartBeat Verbose: 0 : KeepAlive(b8b21c4c-22b4-4686-9098-cb72c904d4c9)
SignalR.Transports.TransportHeartBeat Verbose: 0 : KeepAlive(b8b21c4c-22b4-4686-9098-cb72c904d4c9)
还有几十条SignalR.Transports.TransportHeartBeat
消息,但没有其他消息。
我认为信号器默认超时110秒。您可以尝试信号中断事件来重新连接它吗。
$.connection.hub.disconnected(function () {
setTimeout(function () {
startHub();
}, 5000);
});
在startHub()中,您可以重新启动连接。
参考:https://github.com/SignalR/SignalR/issues/3128
以及如何使用SignalR事件以正确的方式保持连接?
事实证明,问题出在我处理AlertHub
连接的方式上。我正在使用Enterprise Library Caching来存储支持AlertHub
的连接,并且在创建缓存项20分钟后使其过期。Ergo,当服务器调用客户端方法时,没有报告错误,因为没有客户端可以向其发送消息。
此后,我将缓存过期时间增加到了一个合理的值,从而解决了问题。
如果客户端处于非活动状态,没有鼠标移动(大约每15-30分钟),则可以刷新页面。我也遇到了同样的问题,就这样解决了。这是一个令人讨厌的变通方法,但后来我忘记了,也从未完全修复过;)
- 如何停止字幕文本一段时间,然后继续
- HTTP服务器在一段时间后停止(Node.js)
- Hammer.js过了一段时间就停止工作了
- SignalR在一段时间后停止工作
- 停止JavaScript一段时间
- 在页面加载时禁用 CSS 动画,但每隔一段时间工作一次
- 执行了一段时间的javascript/jquery函数,然后停止
- 自动刷新JavaScript功能在一段时间后停止工作
- 如何在JavaScript中一段时间后停止递归函数
- 为什么setInterval在一段时间后无法正常工作
- 如何使setInterval在一段时间后或多次操作后停止
- jQuery在一段时间后停止$.post进程
- 停止setInterval()函数一段时间
- Angularjs应用会在一段时间后停止加载资源
- 如何在一段时间后停止执行包含无限循环的Javascript函数
- setTimeout在我的循环javascript幻灯片函数中工作了一段时间,然后停止延迟
- 带有node.js管道接收器的ZeroMQ在一段时间后停止接收消息
- Javascript弹出停止一段时间后
- 为什么这个轮询在空转一段时间后停止工作
- 表行在不工作一段时间后变得褪色