166

SignalRが内部でどのように高レベルで機能するかを誰かに教えてもらえますか?

私はそれがを使用してデータをフラッシュしていると推測してResponse.Flushおり、クライアント側では特定の間隔でAjaxリクエストを送信しています。それが正しいか?

4

2 に答える 2

253

いいえ、SignalRは接続を介した抽象化です。その接続を介して2つのプログラミングモデル(ハブと持続的接続)を提供します。SignalRにはトランスポートの概念があり、各トランスポートはデータの送受信方法と接続および切断方法を決定します。

SignalRには、いくつかのトランスポートが組み込まれています。

  1. WebSocket
  2. サーバー送信イベント
  3. フォーエバーフレーム
  4. 長いポーリング

SignalRは、サーバーとクライアントでサポートされている「最適な」接続を選択しようとします(特定のトランスポートを使用するように強制することもできます)。

それがハイレベルです。各トランスポートがどのように実装されているかを確認したい場合は、ソースコードを確認できます。

各トランスポートのクライアントコードもあります: https ://github.com/SignalR/SignalR/tree/master/src/Microsoft.AspNet.SignalR.Client.JS

特に長いポーリングトランスポートがどのように機能するかについて質問している場合:

シグナルが応答するのを非同期的に待機しているサーバーにajaxリクエストを送信します。シグナルがあるか、リクエストがタイムアウトすると、サーバーから戻って別のリクエストを送信し、プロセスが続行されます。(メッセージを見逃さないように、クライアントが見たものを追跡する方法についての詳細をいくつか省略しました)

うまくいけば、それはあなたの質問のほとんどに答えます。

于 2011-10-24T10:37:21.803 に答える
9

@davidfowlはすでに大部分に回答しています。ただし、トランスポートの動作の違い、特にWebSocketと他のトランスポートの違いに関する詳細を提供するため。以下はいくつかのポイントです。

  • WebSocketは、クライアントとサーバーの間に真の永続的な双方向接続を確立する唯一のトランスポートです。ただし、WebSocketは、IIS 8以降、および最新バージョンのInternet Explorer、Google Chrome、MozillaFirefoxでのみサポートされています。
  • サーバー送信イベント、Forever Frame、およびLongポーリングでは、3つすべてが一方向通信に従い、ほ​​とんどのブラウザーでサポートされています。
于 2017-04-04T06:41:39.857 に答える