2017-10-10 4 views
2

ダッシュボードを更新するために2秒ごとにhttp GET要求を出している角型アプリケーションを作成しました。しかし、あまりにもしばしば、私はHTTPエラー429(Too Many Request)を受け取ります。angular2 HTTPサービスとキープアライブ接続を使用する方法

私は、要求が5秒の時間で「キープアライブ」であるFirefoxの開発ツールで見たので、私は、各呼び出しは、サーバーへの接続を開くと、私が言うことができますどのようにそれを

を再利用していないと思います接続を再利用するには角度がありますか?またはどのように429を避けることができますか? 3つまたは4つの同時クライアントのみが存在します。

関連するコードは以下の通りです:

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

はWebSocketをhttps://developer.mozilla.org/en-US/docs/Web/API/WebSockets_API – jbrown

+0

ええ@jbrownのためのケースのように聞こえるが、私のバックエンドはLaravel(PHP)です。 PHPでWebソケットを実装するのは複雑だと思います。私は長い間PHPプロセスが生き残っているとは思わない。 – alvaropgl

+1

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

答えて

0

これは私が使用したシンプル期限切れに実装したものです。

セッションには何があり、セッションはバックエンドに送信されます(30秒ごと)。 succesメッセージがポップアップすると、logoutTimerに15分が追加されます。日付がlogoutTimerより高い場合は、自動的にログアウトします。

localstorageが使用されています。メインページで再び開くと、セッションは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()); 
    } 
関連する問題