我对SignalR很陌生,我有一个使用这项技术与服务器通信的网络应用程序(非常酷的恕我直言)。
我想知道的是 - 有没有办法在客户端使用SingalR处理超时事件?是否有一个超时事件被触发,我可以在客户端收听?
当我超时时,我可以在日志中看到它:
[12:56:47 GMT+0300 (Jerusalem Daylight Time)] SignalR: Keep alive has been missed, connection may be dead/slow.
[12:56:54 GMT+0300 (Jerusalem Daylight Time)] SignalR: Keep alive timed out. Notifying transport that connection has been lost.
为了清楚起见我不想运行自己的计时器并检查是否发生超时,我问是否有这样的事件在SignalR中被触发?
谢谢!
答案 0 :(得分:3)
您可以阅读here $.connection.hub.disconnected
处理已断开连接的事件以在尝试时显示消息 重新连接已超时。在这种情况下,唯一的方法 重新建立与服务器的连接是重新启动 SignalR连接通过调用Start方法,将创建一个 新连接ID。以下代码示例使用标志来确保 您只在重新连接超时后才发出通知,而不是 通过调用后正常结束SignalR连接 停止方法。
您可以通过$.connection.hub.disconnected
事件处理程序管理连接超时:
$.connection.hub.disconnected(function() {
if(tryingToReconnect) {
notifyUserOfDisconnect(); // Your function to notify user.
}
});
如果您使用长轮询连接,请注意,因为如果网络连接突然断开,则不会调用OnDisconnected()
。
长轮询没有客户端保持活动检查,浏览器本身可能需要几分钟才能意识到连接真的已经死了。