寻找Server Sent Events规范的客户端Java实现。

时间:2013-03-19 09:24:29

标签: java server-sent-events

我有一个桌面客户端和服务器端都用Java实现。服务器端位于Tomcat上。

现在我想检查使用Server Sent Events,而Tomcat可以在服务器上使用它,我不知道如何从客户端进行。所有实现都使用Javascript,如果您的客户端是Javascript客户端,这很好。我的不是。

所以,我的问题是这个 - SSE规范的客户端是否有任何Java实现?

2 个答案:

答案 0 :(得分:6)

我遇到了同样的问题并找到了解决方案。 Jersey有一个SSE客户端(它不是标准发行版的一部分,你还需要你可以在Maven存储库中找到的jersey-media-sse jar。

 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的调用是为了处理Jersey中的错误 - 如果char编码是内容类型的一部分,则jersey将无法识别事件类型。另一方面,规范和浏览器期望设置内容类型。 加。到jira这已经解决了,但是在最新版本中尚未正常工作 jersey-media-sse-2.2.jar,另见https://java.net/jira/browse/JERSEY-2062

希望这会有所帮助,Jens

答案 1 :(得分:1)

github上有这个:https://github.com/aslakhellesoy/eventsource-java 它的历史可以追溯到2011年。