2017-10-10 5 views
2

J'ai créé une application angulaire qui effectue une requête http GET toutes les deux secondes pour mettre à jour un tableau de bord. Mais trop souvent, je reçois une erreur HTTP 429 (Too Many Request).comment utiliser la connexion keep alive avec le service http angular2

j'ai vu dans les outils de développement de Firefox que la demande est « Keep Alive » avec un temps de 5 secondes, donc je pense que chaque appel ouvre une connexion au serveur et non réutiliser

Comment puis-je savoir angulaire pour réutiliser la connexion? ou comment peut éviter un 429? N'ayez que 3 ou 4 clients simultanés.

Le code correspondant est ci-dessous:

ngOnInit() { 
    this.interval = Observable.interval(environment.dashboard_refresh_rate).subscribe(x => { 
     this.getLockersFromService(); 
    }); 
    this.getLockersFromService(); 
} 

ngOnDestroy() { 
    this.interval.unsubscribe(); 
} 

getLockersFromService() { 
    this.http.get('/dashboard').subscribe(
     data => { 
      this.showDashboard(data); 
     }, 
     (err: HttpErrorResponse) => { 
      this.showErrorResponse(err); 
     } 
    ); 
} 
+1

Sons comme un cas pour websockets https://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API – jbrown

+0

ouais @jbrown mais mon back-end est en Laravel (php). Je pense que c'est compliqué d'implémenter des websockets en PHP. Je ne pense pas que je pourrais avoir un long processus de php. – alvaropgl

+1

https://laravel.com/docs/5.5/broadcasting –

Répondre

0

Ceci est une implémentation simple expireront je.

Qu'est-ce qu'il a une session et envoyer la session au backend (toutes les 30 secondes). Si un message de succès apparaît, il ajoutera 15 minutes au logoutTimer. Si la date est supérieure à logoutTimer alors elle se déconnectera automatiquement.

localStorage est utilisé pour, si vous l'ouvrez à nouveau sur la page principale, votre session peut être réactivée avec timeFithTeen.

constructor(private router: Router, private soap: SoapRequest) { //soap is your rest 
     if (localStorage.getItem('logoutTimer') === null) { 
      this.timeFithTeen(); 
     } 
    } 



ngOnInit() { 
     Observable.timer(2000, 30000).subscribe(t => { 
      let date = new Date(); 
      this.soap.keepAlive().then((response: any) => { 
       localStorage.removeItem('logoutTimer'); 
       this.timeFithTeen(); 
      }), ((error: any) => { 
       console.log(error); 
      }); 
      if (date >= new Date(localStorage.getItem('logoutTimer'))) { 
       localStorage.removeItem('sessionExpired'); 
       localStorage.setItem('sessionExpired', 'Session expired'); 
       this.router.navigateByUrl('/login'); 
      } 
     }); 
    } 
     private timeFithTeen() { 
     let logoutTimer = new Date(); 
     logoutTimer.setMinutes(logoutTimer.getMinutes() + 15); 
     localStorage.setItem('logoutTimer', logoutTimer.toString()); 
    }