ASPNET-Core-Server Gesendeten Ereignisse / Antwort flush
Zwar gibt es keine offizielle Dokumentation, weiss jemand wie SSE implementiert werden kann, mit ASP.NET Core?
Ich vermute, dass eine Umsetzung möglicherweise verwenden Sie benutzerdefinierte middleware, vielleicht ist es aber möglich, dass in der controller-action?
- Sprechen Sie von SignalR?
- Nein, es gibt keine SignalR für Core noch.
- Als eine Angelegenheit von der Tat, SignalR 3 steht in der rc1-Finale auf der sowohl die offiziellen nuget feed sowie auf die myget Stall myget.org/gallery/aspnetmaster und nightlies. Das ist, warum ich fragte. Jedoch, es wird nicht bereit sein, für die Freigabe, wenn ASP.NET Core 1.0 veröffentlicht wie bereits erwähnt auf der roadmap github.com/aspnet/Home/wiki/Roadmap
- Danke, mir war nicht bewusst, dass. Ich werde einen Blick auf die Quelle, vielleicht finde ich etwas nützliches. In dieser situation, kompletter Rahmen ist ein wenig übertrieben. Ich habe eine single-uni-direktional-Kanal, implementiert unter Verwendung von websockets und ich bin auf der Suche nach Möglichkeiten, wie Sie machen es noch einfacher.
- pre-Core: github.com/erizet/ServerSentEvent4Net
Du musst angemeldet sein, um einen Kommentar abzugeben.
wwwroot/index.html
Laden der Seite, erstellen Sie eine
EventSource
für diehttp://www.somehost.ca/sse
url. Schreiben Sie dann Ihre Veranstaltungen auf der Konsole.Middleware
Die middleware verarbeitet die
sse
Weg. Es legt dieContent-Type
headertext/event-stream
, die den server-socket-Ereignis benötigt. Dann schreibt es in den Antwort-stream, ohne schließen der Verbindung. Es ahmt die Arbeit, durch die Verzögerung für fünf Sekunden zwischen den schreibt.Controller
Der controller tut genau das gleiche wie die middleware übernimmt.
Die Ausgabe der Konsole in Firefox
Dies ist das Ergebnis in der Firefox-Konsole-Fenster. Alle fünf Sekunden neue Nachrichten ankommt.
Referenzen:
Controller
Klasse. Ich tendiere Weg von der Vererbung für einfache Projekte, den overhead zu vermeiden. Es gibt Vorteile für die Erben derController
Klasse. Es kommt mit einer Menge von hilfsprozeduren, so zu sprechen. Hier ist die Klasse. Kasse seiner öffentlichen/Schutz der Mitglieder, um zu sehen, was es gibt Sie: github.com/aspnet/Mvc/blob/dev/src/...Server gesendeten Ereignisse können vollständig implementiert werden in einer controller-action.
Grundlage dafür ist die Antwort von Shaun Luttin, aber es ist eher ein real-world Beispiel, dass es halten wird, öffnen Sie die Verbindung auf unbestimmte Zeit, und es sendet Nachrichten an die
EventSource
in Reaktion auf Nachrichten, die erstellt wird.Wenn die
EventSource
verbindet/api/ssemessages
wir ein Ereignis hinzufügen Delegierter desMessageCreated
Fall auf den message-repository. Dann schauen wir alle 1 Sekunde um zu sehen, ob dieEventSource
wurde geschlossen, die bewirken, dass der Antrag storniert werden. Wenn der request abgebrochen wird, entfernen wir die Veranstaltung zu delegieren.Den Fall delegieren, bekommt die
Message
- Objekt aus den ereignisargumenten, serialisiert es zu JSON (mit camel-case zu sein, im Einklang mit ASP.NET Core default-Verhalten, wenn Sie ein Objekt zurückgeben Ergebnis), schreibt die JSON an den Körper und spült den Körper stream, schieben die Daten um dieEventSource
.Weitere bei der Erstellung des event-delegate, siehe dieser Artikel und dieses update für .NET Core.
Auch, wenn Sie host das hinter Nginx, werden Sie wollen, Lesen Sie diese SO beantworten und diese ServerFault Antwort.
IMessageRepository
Umsetzung?