web-dev-qa-db-fra.com

Combien de temps les webockets doivent-ils conserver la connexion

J'ai créé un service générique de repos qui consommez en outre une bande WebSocket par ressource mon code Websocket semble alors:

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');
        });
}

Je sais que les sockets Web sont une connexion de longue durée. Je me demande les meilleures pratiques pour maintenir leur longévité. Par exemple, j'ai un service de messages. Qui ouvrira un site Web et postera comme ils viennent, cependant,

Si l'utilisateur navigue loin de cette conversation, devrais-je laisser le socket Web ouvert?

Ou devrais-je le fermer et lorsque l'utilisateur revient à cette conversation, obtenez simplement les messages manquants et réinitialiser la prise Web?

7
johnny 5

Créer une nouvelle connexion est coûteux en termes de ressources. L'objectif de Websocket est spécifiquement d'éviter de créer des connexions sur des intervalles réguliers, tels que dans le cas d'un interrogation long.

Cependant, la maintenance d'une connexion ouverte est également chère: si vous en avez aussi beaucoup d'entre eux, vous ne pourrez peut-être pas ouvrir de nouvelles (sans matériel de réseau supplémentaire, etc.)

Par conséquent:

  • Si vous êtes presque sûr que l'utilisation ne sera pas intéressée par les événements pendant une longue période, fermez la connexion.

  • Si vous êtes à court de connexions, fermez ceux qui sont inactifs.

  • Dans d'autres cas, gardez-le ouvert, ce qui permettrait également de simplifier votre code.

4
Arseni Mourzenko