簡體   English   中英

Websocket 應用變成無狀態微服務?

[英]Websocket app into stateless microservice?

我想按照所有常規做法將我創建的應用程序轉換為適當的微服務。

但是我無法理解如何實現無狀態和水平擴展。 這個特定的應用程序簡而言之執行以下操作。

  1. 用戶 A 啟動共享室並連接到 websocket

  2. 用戶 B 加入共享室並連接到 websocket

  3. 當第三個服務通過 tcp 將一些二進制數據流式傳輸到此服務時,兩個用戶都通過 websockets 獲取數據

把它想象成一群人的視頻流

我試圖了解我將如何管理強制用戶連接到同一個實例,共享室存在於 memory 中,以及這如何可能變得無狀態。

我的一個問題是,當用戶 B 提出加入這個房間的請求時,我怎么知道哪個實例在 memory 中持有這個?

謝謝

您可能需要考慮一個“路由服務”——它將在房間和這些房間所在的服務器之間保持映射。

或者,您可以考慮解耦 websocket 連接處理程序和房間。 所以你有一個服務器 websockers 的服務。 另一項服務負責客房服務。 還有一個 map 用戶使用 websockets。

因此,當用戶加入房間時,會發生兩件事:websocket 將在連接服務中處理,用戶將獲得其 ID 和連接服務實例之間的映射(這不必是特定實例,因為這會泄漏服務實現詳細信息;更多內容見下文)。 此外,Rooms 服務會將用戶注冊到房間。

現在有信息要傳遞給所有人; 每個用戶 ID 都可以解析為一個連接處理程序,並將消息發送到那里。

連接服務可能有 API,例如:傳遞(地址,消息)。 地址對連接服務有意義; 例如 web 服務器的編碼地址,也許還有 websocket id。 這個 api 很好,它減少了連接服務的 scope - 服務只知道如何傳遞消息; 服務對用戶或房間一無所知。

長話短說,您可以定義管理連接、管理房間和管理用戶的服務——並讓他們通過 API 進行交流。 主要目標是將每個服務的 scope 減少到其核心目標。

暫無
暫無

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

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