Spring sseEmitter, Ereignisse werden nicht direkt gesendet, nachdem die Methode send aufgerufen wurde

8

Ich versuche Server-gesendete Ereignisse mit Spring 4 (Tomcat 7, Servlet-API 3.0.1) zu machen.

Das Problem ist, dass meine Events nicht gesendet werden, nachdem die Methode send aufgerufen wurde. Sie kommen alle gleichzeitig (mit gleichem Zeitstempel) zum Client nur nach Timeout von SseEmitter , mit EventSource 's Fehlerereignis. Und dann versucht der Client, die Verbindung wiederherzustellen. Irgendeine Idee was passiert?

Ich habe einen einfachen Service erstellt:

%Vor%

mit Client-Code:

%Vor%

App-Initialisierungscode

%Vor%

AppConfig.java

%Vor%

Bild meines Kundenprotokolls:

    
Timofey Novitskiy 09.12.2015, 00:50
quelle

2 Antworten

2

Das habe ich beim Testen von SSEEmitters selbst erlebt. Nach allem, was ich online gelesen habe, sollen SSEEmitters in Verbindung mit einigen Implementierungen von Reactive Streams verwendet werden, z. B. RxJava . Es ist ein bisschen komplex, aber es funktioniert definitiv. Die Idee ist, dass Sie den Sender und ein Observable erstellen und dieses einem Publisher abonnieren. Der Publisher führt sein Verhalten in einem separaten Thread aus und benachrichtigt das Observable, wenn die Ausgabe bereit ist, und das Observable triggert das emitter.send-Objekt. Hier ist ein Beispiel-Snippet, das tun sollte, was Sie wollen:

%Vor%

Hier ist ein entsprechender Publisher:

%Vor%

Es gibt ein paar Beispiele für dieses Modell online hier und hier , und Sie können mehr von Googeln "RxJava SseEmitter" finden. Es braucht etwas Zeit, um die Reactive Streams / RxJava / SseEmitter-Interaktionen zu finden, aber sobald Sie es tun, ist es ziemlich elegant. Hoffe das setzt dich auf den richtigen Weg!

    
Kevin Page 13.05.2016 18:06
quelle
0

Während die andere Antwort richtig ist, können Sie, wenn Sie sie selbst verwalten möchten, Folgendes anrufen:

%Vor%     
user1121883 17.01.2017 14:38
quelle