36

我已经看到了如何通过绑定到 .disconnect 事件来使用 SignalR 在客户端捕获断开连接事件。

既然我已经这样做了,我想将客户端置于“等待重新连接周期”中,它会不断尝试连接,直到连接成功或用户取消。集线器是否公开连接状态属性?我在想类似(伪代码)

var isConnected;

function onConnected() { isConnected = true; }

hub.disconnect = function() { while(hub.notconnected) { connect(); }
4

3 回答 3

59

此答案特定于“SignalR 版本 2”,最新版本“ASP.NET Core SignalR”可能会有所不同。

SignalR 版本 2: JS 客户端尝试重新连接一段时间,默认为 110 秒。您可以订阅 connection.stateChanged 事件,并在状态更改时获取更新,以便您可以将其显示给用户,或验证 SignalR 对不同断开连接场景的响应。

在我的测试中,如您所料,状态已正确更新为断开连接和重新连接等。

有关信号器连接的更多信息

function connectionStateChanged(state) {
    var stateConversion = {0: 'connecting', 1: 'connected', 2: 'reconnecting', 4: 'disconnected'};
    console.log('SignalR state changed from: ' + stateConversion[state.oldState]
     + ' to: ' + stateConversion[state.newState]);
}

connection = $.connection(signalR_Endpoint);
connection.stateChanged(connectionStateChanged);
connection.start({ waitForPageLoad: false });
于 2012-10-10T18:03:30.650 回答
10

客户端总是试图连接。你不必担心这一点。您可以收听一个重新连接的事件,以防您在成功重新建立连接后想要执行某些操作。

编辑:这改变了,客户端只在一段时间内尝试重新连接。之后,您必须捕获断开连接事件并手动重新启动。

于 2012-02-18T16:59:10.073 回答
3

这是我的代码:

$.connection.hub.stateChanged(function (state) {
            var stateConversion = { 0: 'connecting', 1: 'connected', 2: 'reconnecting', 4: 'disconnected' };
            console.log('SignalR state changed from: ' + stateConversion[state.oldState]
                + ' to: ' + stateConversion[state.newState]);
        });
于 2020-06-21T05:57:16.717 回答