2013-03-19 25 views
6

Tôi có một máy tính để bàn và một bên máy chủ được triển khai thực hiện trong Java. Phía máy chủ nằm trên Tomcat.Tìm kiếm triển khai Java phía máy khách của thông số Sự kiện đã gửi của máy chủ.

Bây giờ tôi muốn kiểm tra bằng cách sử dụng Sự kiện máy chủ đã gửi và trong khi Tomcat làm cho nó có thể sử dụng nó trên máy chủ, tôi không thấy làm thế nào tôi có thể làm điều đó từ phía khách hàng của nó. Tất cả các triển khai sử dụng Javascript, điều này là tốt nếu khách hàng của bạn là một ứng dụng Javascript. Của tôi thì không.

Vì vậy, câu hỏi của tôi là điều này - có bất kỳ triển khai Java nào của phía máy khách của thông số SSE không?

+0

bất kỳ ý tưởng nào về điều này? jersey SSE đang làm việc cho bạn? Bạn có thể giúp tôi không ? http://stackoverflow.com/questions/23672354/server-side-event-not-firing-in-jersey-2-8-using-sse – Sadanand

Trả lời

5

Tôi gặp sự cố tương tự và đã tìm ra giải pháp. Jersey có một khách hàng SSE (nó không nằm trong phân phối chuẩn, bạn cũng cần bình jersey-truyền thông-SSE mà bạn có thể tìm thấy trong kho 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"); 
} 

Các invocation của setChunkType là để đối phó với một lỗi. ở Jersey - nếu mã hóa char là một phần của loại nội dung, áo sẽ không nhận ra loại sự kiện. Mặt khác, thông số kỹ thuật và trình duyệt mong đợi loại nội dung sẽ được đặt. chắc chắn chưa làm việc trong phiên bản mới nhất jersey-media-sse-2.2.jar, xem thêm https://java.net/jira/browse/JERSEY-2062.

Hy vọng điều này sẽ giúp, Jens

+0

vui lòng kiểm tra ma bình luận ở trên – Sadanand

+0

Jersey cũng có một lớp EventSource để ẩn một số nội bộ cũng như xử lý không đồng bộ: https://jersey.java.net/documentation/latest/sse.html#d0e11876 – mikemachado

+0

Nó hoạt động. Cảm ơn bạn về tài liệu. – thangdc94

Các vấn đề liên quan