SignalR在客户端处理超时事件

时间:2015-10-24 10:00:43

标签: javascript asp.net signalr signalr-hub signalr.client

我对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中被触发?

谢谢!

1 个答案:

答案 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()

长轮询没有客户端保持活动检查,浏览器本身可能需要几分钟才能意识到连接真的已经死了。

Reference