Wie funktioniert SignalR intern?

160

Kann mir jemand mitteilen, wie SignalR intern auf hohem Niveau funktioniert?

Ich vermute, es werden die Daten mit gelöscht Response.Flushund auf der Clientseite werden in bestimmten Intervallen Ajax-Anforderungen gesendet. Ist es richtig?

user960567
quelle
13
@dfowler hat kürzlich ein Interview mit Scott Hansleman geführt, das sehr informativ war. hanselminutes.com/291/… .
Ausgerichtet am
1
Guter Artikel über Signal r Architektur und wie es funktioniert lostechies.com/erichexter/2012/11/05/… asp.net/signalr/overview/getting-started/…
Mahesh
Ich weiß, es ist lange her, aber microsoftvirtualacademy.com/Content/…
lordkain
1
Siehe auch diese Präsentation auf der NDC 2013 von David Fowler und Damian Edwards mit dem Titel "Under the cover with ASP.NET SignalR", in der sie eine Lite-Version von SignalR live auf der Bühne erstellen. Es ist sehr informativ. Es ist vor 2.0, aber das sollte nicht viel ausmachen. vimeo.com/68383353
Johan B

Antworten:

241

Nein, SignalR ist eine Abstraktion über eine Verbindung. Über diese Verbindung erhalten Sie zwei Programmiermodelle (Hubs und dauerhafte Verbindungen). SignalR hat ein Transportkonzept. Jeder Transport entscheidet, wie Daten gesendet / empfangen werden und wie sie verbunden und getrennt werden.

SignalR hat einige eingebaute Transporte:

  1. WebSockets
  2. Vom Server gesendete Ereignisse
  3. Für immer Rahmen
  4. Lange Abstimmung

SignalR versucht, die "beste" Verbindung auszuwählen, die von Server und Client unterstützt wird (Sie können auch die Verwendung eines bestimmten Transports erzwingen).

Das ist das hohe Niveau. Wenn Sie sehen möchten, wie jeder Transport implementiert ist, können Sie sich den Quellcode ansehen .

Es gibt auch Client-Code für jeden Transport: https://github.com/SignalR/SignalR/tree/master/src/Microsoft.AspNet.SignalR.Client.JS

Wenn Sie sich fragen, wie der lange Abfragetransport insbesondere funktioniert:

Es sendet eine Ajax-Anfrage an den Server, der asynchron auf die Antwort eines Signals wartet. Wenn ein Signal vorliegt oder die Anforderung abgelaufen ist, kehrt es vom Server zurück und sendet eine weitere Anforderung, und der Vorgang wird fortgesetzt. (Ich habe einige Details darüber ausgelassen, wie der Client verfolgt, was er gesehen hat, damit er keine Nachrichten verpasst.)

Hoffentlich beantwortet das den größten Teil Ihrer Frage.

Davidfowl
quelle
3
Können Sie mir sagen, wie viele Verbindungen gleichzeitig unterstützt werden können?
Farhad-Taran
1
Welche Anzahl von Verbindungen der Signalr unterstützen wird, hängt von der Anforderungsgrenze des IIS ab. Sie kann mithilfe von Konfigurationseinträgen oder Shell-Skripten erweitert werden. Normalerweise speichert Signalr 1000 Verbindungen im Speicher.
Thanigainathan
1
Wie bereits erwähnt, liegt die Limit-Rally auf Serverebene. Damnien Edwards (Mitentwickler von SignalR) hat jedoch 150.000 Verbindungen von einem einzelnen 10-GB-Server: twitter.com/DamianEdwards/status/486642486350061568
LDJ
jede Antwort auf diese Frage stackoverflow.com/q/40906789/3565879
Technacron
@ Davidfowl bitte geben Sie Antwort für diese stackoverflow.com/questions/47504489/…
Hitesh Thakor