Kann mir jemand mitteilen, wie SignalR intern auf hohem Niveau funktioniert?
Ich vermute, es werden die Daten mit gelöscht Response.Flush
und auf der Clientseite werden in bestimmten Intervallen Ajax-Anforderungen gesendet. Ist es richtig?
Kann mir jemand mitteilen, wie SignalR intern auf hohem Niveau funktioniert?
Ich vermute, es werden die Daten mit gelöscht Response.Flush
und auf der Clientseite werden in bestimmten Intervallen Ajax-Anforderungen gesendet. Ist es richtig?
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.