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?
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:
WebSockets
Vom Server gesendete Ereignisse
Für immer Rahmen
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 .
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.
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
Antworten:
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:
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.
quelle