2013-03-19 79 views
6

我有一個用Java實現的桌面客戶端和服務器端。服務器端坐在Tomcat上。尋找Server Sent Events規範的客戶端的Java實現。

現在我想檢查使用服務器發送事件,而Tomcat使它可以在服務器上使用它,我不知道我怎麼能從它的客戶端。所有的實現都使用Javascript,如果你的客戶端是Javascript客戶端,這很好。我的不是。

所以,我的問題是 - SSE規範的客戶端是否有Java實現?

+0

對此有何看法?球衣SSE正在爲你服務?你能幫我麼 ? http://stackoverflow.com/questions/23672354/server-side-event-not-firing-in-jersey-2-8-using-sse – Sadanand 2014-05-18 04:17:37

回答

5

我有同樣的問題,並找到了解決方案。新澤西州有一個SSE客戶端(它不是標準發行版的一部分,還需要在球衣媒體-SSE罐子,你可以在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"); 
} 

setChunkType的調用是處理錯誤在澤西島 - 如果字符編碼是內容類型的一部分,球衣不會識別事件類型。另一方面,規範和瀏覽器期望內容類型被設置。 Acc。to jira已解決,但是defintely不是最新的版本還沒有工作 球衣媒體-SSE-2.2.jar,也https://java.net/jira/browse/JERSEY-2062見。

希望這有助於延

+0

親切地檢查ma評論以上 – Sadanand 2014-05-18 04:18:22

+0

澤西島也有一個EventSource類來隱藏一些內部以及異步處理:https://jersey.java.net/documentation/latest/sse.html#d0e11876 – mikemachado 2015-07-01 04:13:43

+0

它的工作。謝謝你的文件。 – thangdc94 2017-02-14 04:16:14