簡體   English   中英

如何從客戶端角度處理CQRS

[英]How to handle CQRS from a client-side perspective

我的公司計划在后端使用CQRS架構,但作為客戶端開發人員,我對如何使用請求感到困惑。 以下是我提出的方法,從我的觀點來看,沒有一個是理想的:

  1. 服務器等待,直到隊列得到處理,並在響應中返回所需的數據。 (從性能的角度來看,這聽起來很糟糕);
  2. 一旦請求被添加到隊列,客戶端發出請求並返回“202 Accepted”,而客戶端使用間隔系統進行池化,直到從后端獲取必要的數據(我不是一個大粉絲)每秒做一次X http請求);
  3. Web套接字......似乎是完美的解決方案,因為服務器能夠在處理后將數據推送到客戶端(我有點擔心在整個應用程序周圍打開數千個套接字)。

所以問題是:解決這個問題的最佳方法是什么? (不一定是上述之一)

嗯,這一切都取決於你打算在UI中做什么。

如果你有一個SPA並且對Javascript中事件和訂閱有很好的理解,那么單個WebSocket連接似乎是最自然的選擇。 如果連接在大多數時間處於空閑狀態,並且服務器是異步的(以避免線程不足),則數以千計的WebSocket連接在服務器中不是問題。 但那么......為什么你想要一個REST接口? 您可以通過帶有相關ID的WebSocket發送請求,然后等待具有相同相關ID的響應以了解何時完成,這樣可以避免每個請求創建新連接的開銷。

如果您對AJAX更熟悉並且想要使用REST,那么您可以使用這種異步方法 ,但是您需要進行池化,直到獲得HTTP 303 See Other 它並不完美,但它可能只是為了操作而打開WebSocket。

阻止連接直到有響應是一種非常糟糕的方法。 網絡不能被認為是可靠的,因此如果連接斷開,瀏覽器需要知道如何找出操作的結果。

要完成vtortola的答案,您還可以檢查此項目SwaggerSocket 它旨在為REST API提供websocket接口以獲得更好的性能。

傳輸不是唯一的問題,您將如何同步服務器和客戶端上的合同? 我通過將所有命令和查詢呈現為javascript來解決這個問題。 在我的情況下,我使用t4模板引擎,但可以使用任何模板引擎。 你可以在這里閱讀更多

http://andersmalmgren.com/2014/02/05/typed-javascript-contracts-using-t4-templates/

至於傳輸,我認為REST很好,如果你使用例如.NET WebApi並正確使用async關鍵字,那么當有等待的I / O時,框架將重用該線程(DB等)

暫無
暫無

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

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