更改页面时hub.statechange断开连接

时间:2013-03-06 00:15:56

标签: signalr

所以我有一个显示问题,并想知道解决它的最佳方法。当$ .connection.hub.stateChanged事件触发并且处于断开连接状态时,我向用户显示一个对话框,说明连接已丢失。 但不幸的是,当我更改页面时,此事件被触发并在页面更改之前显示对话框,显示此错误几秒钟。

导航到其他按钮时禁用statechange事件的最佳方法是什么?或者我可以在事件中做一些检查:

$.connection.hub.stateChanged(function (change) {
    if (change.newState === $.connection.connectionState.disconnected) {
        //Pseudo code:
        if (!pageIsChanging) {
            $('#lostConnectivityDiv').modal('show');
        }
    }
});

或者是否有一个jquery事件,用于何时在断开集线器之前触发页面更改事件?

1 个答案:

答案 0 :(得分:2)

如果您尝试通知用户连接已丢失,则更好的路线将是重新连接状态(下面的 B )。

请参阅答案:When does a reconnect in signalR occour?了解背景信息。

<强> A) 对于SignalR,只有一个点发生真正的连接丢失,#4 在上面的链接中。当我说真正的连接丢失时,我指的是SignalR连接停止尝试重新连接的点。

<强> B) 但是,根据您希望如何实现通知,您还可以认为只应在重新连接时触发(意味着网络已关闭但连接正在尝试恢复)。

所有这些都说明你可以以任何方式实施你的通知。

A的实施:

var tryingToReconnect = false;

$.connection.hub.reconnecting(function() {
    tryingToReconnect = true;
});

$.connection.hub.reconnected(function() {
    tryingToReconnect = false;
});

$.connection.hub.disconnected(function() {
    if(tryingToReconnect) {
        notifyUserOfDisconnect(); // Your function to notify user
    }
});

B的实施:

$.connection.hub.reconnecting(function() {
    notifyUserOfDisconnect(); // Your function to notify user
});