繁体   English   中英

Java Servlet中的异步SSE侦听器

[英]Asynchronous SSE Listener in Java Servlet

我是这里的新手,如果我不熟悉标准操作程序,请原谅我,但是我已经详细研究了此主题,并且没有找到很多信息。

我正在尝试在Java Http Servlet中实现一个客户端,该客户端可以订阅服务器发送事件流并解析该流中的数据。 每次我有一个客户端向我的Http Servlet发布请求时,我都需要将一些数据从该客户端传递到另一台服务器,然后打开一个SSE侦听器,因为这是另一台服务器通知我它有数据的方式回到客户手中。

它需要异步并且可能是多线程的,因为我将在很短的时间内收到许多来自客户端的请求,并且我需要捕获服务器返回的每个事件。 我从服务器传递回客户端的数据可能很大,因此我需要线程化,所以我不会错过任何新事件。

我不知道从哪里开始。 我尝试使用Jersey SSE API( https://jersey.java.net/documentation/latest/sse.html )实现一些示例代码,但是当我实现其异步SSE事件处理示例时,发生的事件也会发生我的处理程序可以快速处理所有数据,并将其返回给客户端,并且该函数在完成之前会从新事件中再次调用,或者至少这似乎正在发生。

这是我到目前为止所写内容的摘要:

Client client = ClientBuilder.newBuilder().register(SseFeature.class).build();
WebTarget target = client.target("Target URL");
EventSource eventSource = new EventSource(target) {
 @Override
 public void onEvent(InboundEvent inboundEvent){
     if ("in".equals(inboundEvent.getName())) {

         //Check if the event is of the type we care about
         //If it is, open an input stream to read the payload and store in a byte array via an HttpURLConnection object
         //Open an output stream and stream the payload to a client via an HttpServletResponse Object - This never seems to happen

         }

     }     
 };
}

我知道这很草率,我对Java不那么熟悉,所以我只是把事情拼凑在一起,为此我深表歉意。

这是从我的servlet类中调用的,但是它从来没有达到我写入输出流的地步,我想是因为它被另一个事件打断了。如果有人了解我如何进行此工作,或者另一个这样做的方式,我将不胜感激。 谢谢。

我建议您使用JEaSSE库(Java轻松服务器发送的事件): http ://mvnrepository.com/artifact/info.macias/jeasse

您可以在此处找到一些用法示例:

https://github.com/mariomac/jeasse

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM