簡體   English   中英

如何異步處理SSE事件?

[英]How can I asynchronously handle SSE events?

理想情況下,我希望能夠做這樣的事情

Request request = new Request("http://someendpoint")
request.onMessage(payload -> System.out.println(payload))
request.onError(error -> error.printStackTrace())
request.onClose(() -> System.out.println("closed"))
request.onConnect(isReconnect -> System.out.println("connected"))

顯然不必一定是那樣,只是認為這將有助於解釋我的嘗試。

我看到澤西島對此提供了某種支持。 我想找到一個替代方法,但如果沒有其他可用方法,將使用它。

在JavaEE 8中,通過javax.ws.rs.sse包中的JAX-RS 2.1可以使用SSE。 與可以同步或異步的請求和響應不同,SSE本質上是異步的。

有關SSE的演示,請觀看David Delaba sse e的這段視頻 您的代碼(僅客戶端)將如下所示:

Client client = ClientBuilder.newClient();
WebTarget target = client.target("http://someendpoint");

SseEventSource eventSource = SseEventSource.target(target)
                                           .reconnectingEvery(5, TimeUnit.SECONDS)
                                           .build();
eventSource.register(payload -> System.out.println(payload),   // Consumer<InboundSseEvent>
                     error -> error.printStackTrace(),         // Consumer<Throwable>
                     () -> System.out.println("no more events"));
eventSource.open();
// and eventually
eventSource.close();

沒有用於(重新)連接和關閉的內置處理程序,但是您可以自定義某些內容以產生相同的效果。

JAX-RS 2.1在(至少)中實現:

  • 澤西島 2.26,包含在Glassfish 5和Payara 5 alpha /快照/預發行版本中。
  • RESTEasy 4.0.0.Beta1(不到一個月前發布),據報道可在Wildfly 10及更高版本上運行,盡管我認為只有Wildfly 12才能實現完整的JavaEE 8(公告會隨着時間的變化...)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM