Playframework: EventSource.Event (SSE) kann nicht zum Senden von Kommentaren / zum Aufrechterhalten von Nachrichten verwendet werden

Erstellt am 26. März 2019  ·  4Kommentare  ·  Quelle: playframework/playframework

Spielversion (2.7.0)

API (Scala)

Erwartetes Verhalten

Es sollte möglich sein, Kommentarereignisse mit play.api.libs.EventSource.Event (auch bekannt als ServerSentEvents / SSE) zu senden. Diese Ereignisse beginnen mit einem Doppelpunkt und können verwendet werden, um die Verbindung aufrechtzuerhalten, z.

: this is a keep alive message

data: some actual event with data

Wie unter https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#Examples beschrieben

Auf diese Weise können Sie eine Verbindung aufrechterhalten, indem Sie z.

Ok.chunked(source.via(EventSource.flow).keepAlive(50.seconds, () => heartbeatEvent)).as(ContentTypes.EVENT_STREAM)

Tatsächliches Verhalten

Die Fallklasse play.api.libs.EventSource.Event formatiert die Zeile immer mit einem Präfix data: . Daher können keine reinen Kommentare / Herzschläge gesendet werden.

help wanted

Hilfreichster Kommentar

Hey @ an-tex,

Ja, es ist sinnvoll, Ereigniskommentare zu unterstützen, möglicherweise als neues Feld in play.api.libs.EventSource.Event oder sogar als eigener Typ. Eine mögliche Problemumgehung besteht derzeit darin, Ereignisse mit event: heartbeat zu senden, zum Beispiel:

val heartbeatEvent = Event(data = heartbeatData, name = Some("heartbeat"))
Ok.chunked(source.via(EventSource.flow).keepAlive(50.seconds, () => heartbeatEvent)).as(ContentTypes.EVENT_STREAM)

Und auf der Client-Seite haben Sie einen Event-Listener für heartbeat .

Alle 4 Kommentare

Hey @ an-tex,

Ja, es ist sinnvoll, Ereigniskommentare zu unterstützen, möglicherweise als neues Feld in play.api.libs.EventSource.Event oder sogar als eigener Typ. Eine mögliche Problemumgehung besteht derzeit darin, Ereignisse mit event: heartbeat zu senden, zum Beispiel:

val heartbeatEvent = Event(data = heartbeatData, name = Some("heartbeat"))
Ok.chunked(source.via(EventSource.flow).keepAlive(50.seconds, () => heartbeatEvent)).as(ContentTypes.EVENT_STREAM)

Und auf der Client-Seite haben Sie einen Event-Listener für heartbeat .

Ja, diese Problemumgehung funktioniert. Ich werde versuchen, in den nächsten Wochen eine PR zu machen.

Hey @marcospereira, da ich in dieser Ausgabe keine weiteren Updates sehe, darf ich daran arbeiten? Jeder Zeiger wäre hilfreich, danke!

Hi @ fusuiyi123 , sorry das habe ich total vergessen. Von meiner Seite fühlen Sie sich frei zu übernehmen. Prost

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen