2013-03-19 6 views
6

Ich habe einen Desktop-Client und einen Server-Seiten beide in Java implementiert. Die Serverseite sitzt auf Tomcat.Suchen Sie nach einer Java-Implementierung der Clientseite der Server Sent Events-Spezifikation.

Jetzt möchte ich überprüfen, mit Server gesendete Ereignisse und während Tomcat ermöglicht es auf dem Server zu verwenden, sehe ich nicht, wie ich es von der Client-Seite davon tun kann. Alle Implementierungen verwenden Javascript, was gut ist, wenn Ihr Client ein Javascript-Client ist. Meins ist nicht.

Also meine Frage ist dies - gibt es Java-Implementierungen der Client-Seite der SSE-Spezifikation?

+0

eine Idee zu diesem Thema? Jersey SSE arbeitet für Sie? kannst du mir bitte helfen ? http://stackoverflow.com/questions/23672354/server-side-event-not-firing-in-jersey-2-8-using-sse – Sadanand

Antwort

5

Ich hatte das gleiche Problem und eine Lösung gefunden. Jersey einen SSE-Client (es ist nicht Teil der Standard-Distribution hat, müssen Sie auch das Trikot-media-sse Glas, die Sie im Maven Repository finden.

public static void consumeEventStream(String url, Consumer consumer) throws Exception { 
    Client client = ClientBuilder.newBuilder().register(new SseFeature()).build(); 
    WebTarget target = client.target(url); 
    EventInput e = null; 
    while (true) { 
     Thread.sleep(1000); 
     if (e==null || e.isClosed()) { 
      // (re)connect 
      e = target.request().get(EventInput.class); 

      e.setChunkType("text/event-stream"); 
     } 

     final InboundEvent inboundEvent = e.read(); 
     if (inboundEvent == null) { 
      break; 
     } 
     else { 
      String data = inboundEvent.getData(); 
      // do something here - notify observers, parse json etc 
     } 

    } 
    System.out.println("connection closed"); 
} 

Der Aufruf von setChunkType ist mit einem Fehler zu tun in Jersey - Wenn die Zeichencodierung Teil des Inhaltstyps ist, wird der Ereignistyp von Jersey nicht erkannt. Auf der anderen Seite erwarten die Spezifikationen und Browser, dass der Inhaltstyp festgelegt wird. Nach jira wurde dies jedoch behoben defintely noch nicht in der aktuellen Version Jersey-media-sse-2.2.jar arbeiten, siehe auch https://java.net/jira/browse/JERSEY-2062.

hoffte, das hilft, Jens

+0

bitte überprüfen Sie meine Kommentar über – Sadanand

+0

Jersey hat auch eine EventSource-Klasse, um einige zu verbergen die Interna sowie Async-Verarbeitung: https://jersey.java.net/documentation/latest/sse.html#d0e11876 – mikemachado

+0

Es hat funktioniert. Danke für das Dokument. – thangdc94

Verwandte Themen