SignalRは内部でどのように機能しますか?


160

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

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


13
@dfowlerが最近スコットハンスレマンとのインタビューを行いました。これは非常に有益なhanselminutes.com/291/…でした
2012

1
グッド信号rアーキテクチャについての記事とどのようにそれが動作lostechies.com/erichexter/2012/11/05/... asp.net/signalr/overview/getting-started/...
マヘシュ

私はそれをずっと前に知っていますが、microsoftvirtualacademy.com
Content /…

1
デビッドファウラーとダミアンエドワーズのNDC 2013での「ASP.NET SignalRのカバーの下」と呼ばれるこのプレゼンテーションでは、SignalRのライトバージョンをステージ上でライブで作成しています。それは非常に有益です。2.0より前のバージョンですが、それほど問題にはなりません。vimeo.com/68383353
ヨハンB

回答:


241

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

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

  1. WebSocket
  2. サーバー送信イベント
  3. 永遠のフレーム
  4. ロングポーリング

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

それは高いレベルです。各トランスポートの実装方法を確認する場合は、ソースコードを確認できます。

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

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

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

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


3
一度にサポートできる接続の数を教えてください。
Farhad-Taran 2012

1
Signalrがサポートする接続数については、IISのリクエスト制限によって異なります。設定エントリまたはシェルスクリプトを使用して増やすことができます。通常、Signalerは1000の接続をメモリにキャッシュします。
Thanigainathan 2014年

1
すでに述べたように、リミットラリーはサーバーレベルです。Damnien Edwards(SignalRの共同作成者)は、単一の10GBサーバーから150,000の接続を獲得しています: twitter.com/DamianEdwards/status/486642486350061568
LDJ

この質問に対するすべての回答stackoverflow.com/q/40906789/3565879
Technacron


5

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

  • WebSocketは、クライアントとサーバー間の真の永続的な双方向接続を確立する唯一のトランスポートです。ただし、WebSocketはIIS 8以降、およびInternet Explorer、Google Chrome、Mozilla Firefoxの最新バージョンでのみサポートされています。
  • サーバー送信イベント、フォーエバーフレーム、ロングポーリングの間、3つすべてが一方向通信に従い、ほ​​とんどのブラウザーでサポートされます。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.