web-dev-qa-db-ja.com

Websocketが接続を維持する期間

リソースごとにWebSocketを追加で消費するREST汎用サービスを作成しました。私のWebSocketコードは次のようになります。

initialize(hubSubRoute: string): void{
    const accessToken = this.authManager.getRawAccessToken();

    let hubUrl = environment.baseUrl + hubSubRoute;
    if (accessToken) {
        hubUrl += '?' + this.hubAuthorizationQueryParameter +'=' + accessToken;
    }

    this._hubConnection = new HubConnectionBuilder()
                                .withUrl(hubUrl)
                                .build();
}

startConnection(): void {

    this._hubConnection.start()
        .then(() => {
            console.log('Hub connection started');
            this.connectionEstablished.emit(true);
        })
        .catch(err => {
            console.log('Error while establishing connection');
        });
}

私はWebソケットが長寿命の接続であることを知っています。私は彼らの寿命を維持するためのベストプラクティスを考えています。たとえば、メッセージサービスがあります。ただし、WebSocketを開いてメッセージを投稿しますが、

ユーザーがその会話から離れてナビゲートする場合、Webソケットを開いたままにする必要がありますか?

または、それを閉じて、ユーザーがその会話に戻ったときに、不足しているメッセージを取得してWebソケットを再初期化する必要がありますか?

7
johnny 5

新しい接続の作成は、リソースの面でコストがかかります。 WebSocketの目的は、長いポーリングの場合など、定期的に接続を作成しないようにすることです。

ただし、開いている接続を維持することもコストがかかります。接続が多すぎる場合、新しいネットワークハードウェアを追加しないと、新しい接続を開くことができない場合があります。

したがって:

  • 長い間、イベントに興味がないと確信できる場合は、接続を閉じてください。

  • 接続が不足している場合は、非アクティブな接続を閉じます。

  • それ以外の場合は、開いたままにしておくと、コードが簡単になります。

4