簡體   English   中英

Spring 中的 SSE(服務器端事件)——存儲 SseEmitters

[英]SSE (Server-side events) in Spring - storing SseEmitters

我正在 Web 應用程序中實現 SSE 事件。 我的用例需要有選擇地向某些或所有訂閱的客戶端發送事件的可能性。 我已經在服務器端/ Spring 和客戶端/ Angular 上都有一個基於此SO的實現工作草案。

現在,由於 SSE 需要維護連接,我的應用程序變得有狀態,我需要以某種方式管理該狀態。 我想到的唯一想法是將其作為 Map<UserId, SseEmitter> 存儲在內存中,作為單例服務中的一個字段。 這將需要適當的同步以確保線程安全,但這可以通過使用例如 ConcurrentHashMap 輕松實現。 SseEmitter 類本身似乎是線程安全的。

通常服務在 Spring 中是無狀態的,但我想不出任何替代方法或上述方法失敗的原因。 有沒有人可以提出更好的解決方案?

我會說只是盡量避免狀態! .

在您的句子中, since SSE requires the connection to be maintained, my application becomes stateful ,僅僅因為您保持 TCP 連接打開並不意味着您的應用程序應該是有狀態的。

恕我直言,您可以根據需要/需要創建數據流,並且您感興趣的客戶可以訂閱它們,這樣,您就可以像隊列管理器一樣處理您的事件。

我在這里創建了類似的東西https://github.com/htenjo/vqueue具有以下架構:

在此處輸入圖片說明

也許它可以提供幫助。

暫無
暫無

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

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