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と他のトランスポートの違いに関する詳細を提供するため。以下はいくつかのポイントです。