1. ホーム
  2. signalr

[解決済み] SignalRは内部でどのように動作しているのですか?

2022-04-24 08:54:08

質問

SignalRが内部でどのように動作しているのか、どなたか教えてください。

を使用してデータをフラッシュしていると推測されます。 Response.Flush で、クライアント側で一定時間ごとにAjaxリクエストを送信しています。これは正しいのでしょうか?

解決方法は?

SignalRはコネクションを抽象化したものです。そのコネクションに対して2つのプログラミングモデル(ハブと持続的なコネクション)を提供します。SignalRにはトランスポートという概念があり、それぞれのトランスポートがデータの送受信方法と接続・切断方法を決定します。

SignalRはいくつかのトランスポートを内蔵しています。

  1. ウェブソケット
  2. サーバーから送信されたイベント
  3. フォーエバーフレーム
  4. ロングポーリング

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

これがハイレベルの話です。もし各トランスポートがどのように実装されているか見たい場合は ソースコード .

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

特にロングポーリングトランスポートの仕組みについての質問であれば

ajaxリクエストをサーバーに送り、そのサーバーは非同期でシグナルが返ってくるのを待っています。シグナルがあるか、リクエストがタイムアウトすると、サーバーから戻り、別のリクエストを送信し、プロセスが継続されます。(メッセージを見逃さないために、クライアントが何を見たかを追跡する方法についての詳細は省きました)

これでほとんどの質問に答えられると思います。