SignalRが内部でどのように高レベルで機能するかを誰かに教えてもらえますか?
私はそれが使用Response.Flush
してデータをフラッシュしていて、クライアント側で一定の間隔でAjaxリクエストを送信していると思います。それが正しいか?
SignalRが内部でどのように高レベルで機能するかを誰かに教えてもらえますか?
私はそれが使用Response.Flush
してデータをフラッシュしていて、クライアント側で一定の間隔でAjaxリクエストを送信していると思います。それが正しいか?
回答:
いいえ、SignalRは接続を抽象化したものです。その接続を介して2つのプログラミングモデル(ハブと永続的な接続)を提供します。SignalRにはトランスポートの概念があり、各トランスポートはデータの送受信方法、およびデータの接続方法と切断方法を決定します。
SignalRにはいくつかの組み込みトランスポートがあります。
SignalRは、サーバーとクライアントがサポートする「最適な」接続を選択しようとします(特定のトランスポートを使用するように強制することもできます)。
それは高いレベルです。各トランスポートの実装方法を確認する場合は、ソースコードを確認できます。
各トランスポート用のクライアントコードもあります:https : //github.com/SignalR/SignalR/tree/master/src/Microsoft.AspNet.SignalR.Client.JS
特にロングポーリングトランスポートがどのように機能するかについて質問している場合:
シグナルが応答するのを非同期的に待機しているサーバーにajaxリクエストを送信します。シグナルがある場合、またはリクエストがタイムアウトした場合、サーバーから戻り、別のリクエストを送信してプロセスを続行します。(クライアントがメッセージを見逃さないように、クライアントが見たものを追跡する方法についての詳細は省略しました)
うまくいけば、あなたの質問のほとんどが答えられます。
@davidfowlはすでに主要部分に回答しています。ただし、トランスポートの動作、特にWebSocketと他のトランスポートの動作の違いに関する詳細を提供するには、以下がポイントです。