我有一个桌面客户端和服务器端都用Java实现。服务器端位于Tomcat上。
现在我想检查使用Server Sent Events,而Tomcat可以在服务器上使用它,我不知道如何从客户端进行。所有实现都使用Javascript,如果您的客户端是Javascript客户端,这很好。我的不是。
所以,我的问题是这个 - SSE规范的客户端是否有任何Java实现?
答案 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年。