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