2013-03-19 4 views
6

Ho un client desktop e un lato server entrambi implementati in Java. Il lato server si trova su Tomcat.Ricerca di un'implementazione Java del lato client della specifica Server Sent Events.

Ora desidero controllare utilizzando Server Sent Events e mentre Tomcat rende possibile utilizzarlo sul server, non vedo come posso farlo dal lato client di esso. Tutte le implementazioni utilizzano Javascript, che va bene se il client è un client Javascript. Il mio non lo è.

Quindi, la mia domanda è questa: esistono implementazioni Java del lato client delle specifiche SSE?

+0

qualche idea su questo? maglia SSE sta lavorando per te? Potete per favore aiutarmi ? http://stackoverflow.com/questions/23672354/server-side-event-not-firing-in-jersey-2-8-using-sse – Sadanand

risposta

5

Ho avuto lo stesso problema e ho trovato una soluzione. Jersey ha un client SSE (la sua non fa parte della distribuzione standard, è necessario anche il vaso jersey-media-SSE che potete trovare nel repository Maven.

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"); 
} 

L'invocazione di setChunkType è quello di affrontare un bug in Jersey - se la codifica del char è parte del tipo di contenuto, la jersey non riconoscerà il tipo di evento.In altra parte, le specifiche e i browser si aspettano che il tipo di contenuto sia impostato. Acc. a jira questo è stato risolto ma è sicuramente non ancora lavorare nella sua ultima versione jersey-media-SSE-2.2.jar, puoi anche https://java.net/jira/browse/JERSEY-2062.

Spero che questo aiuti, Jens

+0

gentilmente controlla ma commento sopra – Sadanand

+0

Jersey ha anche una classe EventSource per nascondere alcuni dei l'internals così come l'elaborazione asincrona: https://jersey.java.net/documentation/latest/sse.html#d0e11876 – mikemachado

+0

Ha funzionato. Grazie per il documento. – thangdc94

Problemi correlati