Spring webflux ‐ Server‐Sent Events - CCH0124/spring-sandbox GitHub Wiki

SSE 是一項由大多數瀏覽器採用的規範,允許隨時以單向使用串流事件。"事件"僅僅是遵循規範定義的格式之 UTF-8 編碼文字資料流。這種格式由一系列以換行分隔的鍵值元素構成(id、data、retry 和 event 名稱甚至是 comment),如下定義。規範並未以任何方式限制數據內容格式,可以使用簡單的字串或更加複雜的 JSON 或 XML 結構。

public final class ServerSentEvent<T> {

	@Nullable
	private final String id;

	@Nullable
	private final String event;

	@Nullable
	private final Duration retry;

	@Nullable
	private final String comment;

	@Nullable
	private final T data;
...

ServerSentEvent 提供的優勢

  • 可以處理實際場景中所需的事件元數據
  • 可以忽略 text/event-stream 聲明

對於 ServerSentEvent 還可以新增一個 comment 和一個 retry,它將指定嘗試傳送事件時要使用的重新連線時間。

最後需要考慮的是使用 SSE 流與使用 WebSockets 之間的區別。WebSockets 提供了伺服器和客戶端之間的全雙工(雙向)通信,而 SSE 則使用單向通信。此外,WebSockets 不是 HTTP 協定,與 SSE 相反,它不提供錯誤處理標準。