【问题标题】:SignalR handle timeout event on client sideSignalR 在客户端处理超时事件
【发布时间】:2015-10-25 00:25:59
【问题描述】:

我是 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 中是否有这样的事件被触发?

谢谢!

【问题讨论】:

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


    【解决方案1】:

    如你所见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

    【讨论】:

    • 谢谢。看起来很简单。老实说,我不知道我是怎么错过的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-17
    • 1970-01-01
    • 2018-05-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多