<分区>
我有一个桌面客户端和一个服务器端,它们都是用 Java 实现的。服务器端位于 Tomcat 上。
现在我想检查使用服务器发送的事件,虽然 Tomcat 可以在服务器上使用它,但我不知道如何从它的客户端执行它。所有实现都使用 Javascript,如果您的客户端是 Javascript 客户端,这很好。我的不是。
那么,我的问题是 - SSE 规范的客户端是否有任何 Java 实现?
<分区>
我有一个桌面客户端和一个服务器端,它们都是用 Java 实现的。服务器端位于 Tomcat 上。
现在我想检查使用服务器发送的事件,虽然 Tomcat 可以在服务器上使用它,但我不知道如何从它的客户端执行它。所有实现都使用 Javascript,如果您的客户端是 Javascript 客户端,这很好。我的不是。
那么,我的问题是 - SSE 规范的客户端是否有任何 Java 实现?
最佳答案
我遇到了同样的问题并找到了解决方案。 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 .
希望这对你有帮助,延斯
关于java - 寻找服务器发送事件规范客户端的 Java 实现。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15495591/