如何在客户端检测客户端是否仍连接到SignalR

时间:2019-07-22 05:52:04

标签: angular signalr

我可以检测到客户端是否已与服务器断开连接。但是我的问题是;我的客户如何知道它是否仍连接到SignalR服务器。

我在客户端具有此代码以连接到服务器。连接后,我将状态更改为已连接。但是,如果我关闭SignalR服务器并立即收到如下错误:

  

zone.js:3243 GET   http://localhost:9090/signalr/negotiate?clientProtocol=2.1&connectionData=%5B%7B%22name%22%3A%22apphub%22%7D%5D&_=1563774410720   净:: ERR_CONNECTION_REFUSED

我实际上可以使用它来通知我的客户端我不再连接到服务器,但是我不知道从哪里获得。请在下面查看我的代码以了解如何连接:

public initializeSignalRConnection(): void {
    this.connection = $.hubConnection('http://localhost:9090');
    this.proxy = this.connection.createHubProxy('appHub');

    this.proxy.on('clientPipeline', serverMessage =>
      this.onMessageReceived(serverMessage)
    );

    this.proxy.on('connectionMessage', serverMessage =>
      this.onConnection(serverMessage)
    );

    this.connection.start().done((data: any) => {
      this.broadcastMessage();
    });
}

this.connection.start()仅在SignalR服务器正在运行时发生。但是,如果它没有运行,我想获取错误消息。

我正在考虑这样的事情:

this.connection.start().done((data: any) => {
      this.broadcastMessage();
    }, (err_ => {
         "CONNECTION ERROR"
});

但这不起作用。

您能帮我吗?谢谢。

1 个答案:

答案 0 :(得分:0)

您可以检查连接中stateChanged的更改,并显示您想要通知用户的任何info / popup / modal / etc。

    $.connection.hub.stateChanged(function (status_value) {
    if (status_value.newState == 0) { //Attempting a new connection
    }
    else if (status_value.newState == 1) { //Established a connection
    }
    else if (status_value.newState == 2) { //Attempting reconnect
    }
    else if (status_value.newState == 4) { //Connection lost
    }
});
相关问题