SignalR:检测客户端上的连接状态

Hea*_*her 30 c# signalr

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

现在我已经完成了这个,我想让客户端进入"等待重新连接循环",它不断尝试连接,直到成功或用户取消.集线器是否公开连接状态属性?我在想(伪代码)

var isConnected;

function onConnected() { isConnected = true; }

hub.disconnect = function() { while(hub.notconnected) { connect(); }
Run Code Online (Sandbox Code Playgroud)

Maz*_*ick 51

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 });
Run Code Online (Sandbox Code Playgroud)

  • 我不认为这是完全正确的.如果我失去与服务器的连接,它最终将放弃尝试重新连接并强制我手动重新启动连接.我不会说它总是试图重新连接. (7认同)
  • 请注意,可能的状态在`$ .signalR.connectionState`上枚举,例如`$ .signalR.connectionState.connected`.您可以看到`stateChanged` [here](https://github.com/SignalR/SignalR/wiki/SignalR-JS-Client#connectionstatechanged-handlerchange-)的当前用法 (3认同)
  • 如果有人到达这里,这里写的所有内容都只能与 jQuery SignalR 插件一起使用,在官方 javascript 库中没有“stateChanged”这样的事件:https://learn.microsoft.com/en-us/javascript/ api/@microsoft/signalr/hubconnection?view=signalr-js-latest (3认同)

nma*_*mat 8

客户端总是试图连接.你不必担心这一点.如果您想在成功重新建立连接时执行某些操作,则可以监听重新连接的事件.

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

  • 不对.如果它无法连接一两分钟,它将完全退出.ASP.net signalR页面解决了这个问题并解释了在这些情况下需要再次调用hub.start(可通过hub.disconnected或hub.statechanged检测到) (4认同)

Ali*_*odi 5

这是我的代码:

$.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]);
        });
Run Code Online (Sandbox Code Playgroud)