質問

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

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

役に立ちましたか?

解決

いいえ、SignalRは接続に対する抽象化です。その接続(ハブと永続的な接続)に2つのプログラミングモデルが提供されます。 Signalrには輸送の概念があり、各輸送はデータの送信/受信方法と、接続および切断方法を決定します。

Signalrにはいくつかの組み込み輸送があります:

  1. WebSockets
  2. サーバーはイベントを送信しました
  3. 永遠のフレーム
  4. 長い投票

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

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

各トランスポートのクライアントコードもあります。https://github.com/signalr/signalr/tree/master/src/microsoft.aspnet.signalr.client.js

特に長い投票輸送がどのように機能するかについて尋ねている場合:

これは、信号が応答するのを非同期的に待っているAjaxリクエストをサーバーに送信します。信号があるか、リクエストがタイムアウトすると、サーバーから戻り、別のリクエストを送信し、プロセスが継続されます。 (メッセージを見逃さないように、クライアントが見たものをどのように追跡しているかについての詳細をいくつか残しました)

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

他のヒント

@DavidFowlはすでに主要な部分に答えています。ただし、輸送の動作の違い、特にWebsocketと他の輸送の違いに関する詳細を提供するため。以下はいくつかのポイントです。

  • WebSocketは、クライアントとサーバーの間の真の永続的な双方向接続を確立する唯一のトランスポートです。ただし、WebSocketはIIS 8以降のみでサポートされており、Internet Explorerの最新バージョンであるGoogle ChromeとMozilla Firefoxがサポートされています。
  • サーバーがイベント、Forever Frame、Long Pollingを送信している間、3つすべてが一方向通信に続き、ほとんどのブラウザーでサポートされています。
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top