2017-07-10 24 views
0

私は実装するサードパーティのサービスを持っており、長いポーリングで安らかなAPIを提供しています...彼らはライブイベントを提供しており、できるだけ早く表示することが非常に重要です。Angular2:http - 実際のロングポーリング

悲しいことに、そのサービスは、プッシュ通知を提供していないので、我々は我々が持っているものに対処する必要があります....

アイデアがある理論的にはそこそこのいずれかのAPIは、ロングポーリング機能を持っています私はAPIに照会し、30秒間オープンチャネルを確立し、変更を待つ(そしてFE上で変更を公開する)...そして接続をタイムアウトし、新しいものを確立してプロセスを繰り返す。

はかなりまっすぐ進む....

なるはずですが、これまでのところ、私は長いポーリングについての角度のドキュメントに何かを見つけることができませんでした...私が見つけた唯一のものはrxJSに関連して、ポーリングでした... APIを照会する頻度についての内在を設定します(私の場合は30秒ごとです)...しかし、チャンネルを開いたままで変更を聞くことについては何も...

このthredが見つかりました: How to implement http long polling in Angular 2

しかし、この問題については言及していません。

私は毎秒APIのクエリを終了したくありません。

アイデア?

signalRの実装を検討しましたが(これは実際には役に立たないかもしれませんが)、jQueryに依存しています...バンドルに追加したくないのは、100%必要でない場合です!

+0

ロングポーリングは、エンドポイントを打つ定義によって秒のすべてのX量です。あなたが探しているものは、SignalRやSocket.ioなどのWebSocketです。ただし、すでにサポートしていないWebソケットをサポートするために、別のエンドポイントを作成する必要があります。 – theOriginalJosh

+0

は通常のポーリングではなく、長いポーリングではありませんか? –

+1

うん、私は正しかった:googleから:要点:HTTPロングポーリング。この欠点を克服するために、Webアプリケーション開発者は、クライアントが新しい情報を要求するサーバーをポーリングするHTTP long pollingという技法を実装できます。新しいデータが利用可能になるまで、サーバーは新しいデータが利用可能になるまで要求を保持します。 –

答えて

2

私は長引きの概念を誤解していると思います。 クライアントが新しい情報を要求するサーバーをポーリングする場所が長くなります。新しいデータが利用可能になるまで、サーバーは要求を開いたままにします。利用可能になると、サーバーは応答して新しい情報を送信します。クライアントが新しい情報を受け取ると、すぐに別の要求が送信され、操作が繰り返されます。これは効果的にサーバープッシュ機能をエミュレートします。

enter image description here

それはあなたがwebSoketを使用する必要がアライブ接続を維持したいです。 WebSocketは、クライアントとサーバーの間に永続的な接続を提供し、両者はいつでもデータの送信を開始できます。クライアントは、WebSocketハンドシェイクと呼ばれるプロセスを通じてWebSocket接続を確立します。このプロセスは、クライアントがサーバー

enter image description here

に通常のHTTPリクエストを送信することから始まる。しかし、あなたが別の場合、長期引っ張っ完了、何かのようにフェッチ要求を送信することはできませんなぜ私はあなたの質問から理解されませんでした:

myLongPullingFunc(){ 
this.http.get(longPullingURL) 
.subscribe(res=>{ 
    if(sholdFetchData){ 
    useFetchedData(res); 
    this.myLongPullingFunc(); 
    }else 
     doSomethingElse() 
    }) 
} 

あなたは長い引っ張っhereについての詳細を読むことができるとwebSokectsにhere

+0

Giliは、あなたが私に与えたリンクから、新しい情報がポストされるまで、要求が確立され、サーバーが要求をOPENのままにします。 ....私の理解は普通のポーリングはあなたが何を記述しているか(X時間ごとにデータを引っ張る)です...しかし、長いポーリングはX回ごとにデータをプルしています...しかし、すべてのプルは、時間。 APIサーバーをクラッシュさせる毎秒(クライアントの何百万人も)毎秒APIを使用したくないですが、 –

+0

ですが、websocketsはここに実装する必要があります。 –

+0

私は自分のことを正しく説明していないかもしれません... Iv'eは私の答えを編集しました。 –