如何从客户端角度处理CQRS



我的公司计划在后端使用CQRS架构,但作为客户端开发人员,我对如何使用请求有点困惑。以下是我想到的方法,从我的角度来看,没有一个是理想的:

  1. 服务器等待队列得到处理,并在响应中返回所需的数据。(从性能的角度来看,这听起来像是一个非常糟糕的方法);
  2. 客户端发出请求并在请求被添加到队列后返回"202 Accepted",然后客户端使用间隔系统池,直到它从后端获得必要的数据(我不太喜欢每秒做X http请求);
  3. Web Sockets似乎是完美的解决方案,因为服务器将能够将数据推送到客户端,一旦它被处理(我有点担心在整个应用程序周围打开了数千个套接字)。
所以问题是:解决这个问题的最佳方法是什么?(不一定是上述之一)

这完全取决于你打算在UI中做什么。

如果你有一个SPA并且对Javascript中的事件和订阅有很好的理解,一个WebSocket连接似乎是最自然的选择。如果连接大部分时间都是空闲的,并且服务器是异步的(以避免线程耗尽),那么成千上万的WebSocket连接对服务器来说不是问题。但后来…为什么需要REST接口?你可以通过带有关联ID的WebSocket发送请求,然后等待具有相同关联ID的响应,以知道何时完成,这样可以避免为每个请求创建新连接的开销。

如果您更熟悉AJAX并希望使用REST,那么您可以使用这种异步方法,但是您需要池,直到您获得HTTP 303 See Other。它不是完美的,但它可能比仅仅为了那个操作而打开WebSocket要好。

阻塞连接直到有响应是一个非常糟糕的方法。网络不能被认为是可靠的,所以如果连接断开,浏览器需要知道如何找到操作的结果。

传输不是唯一的问题,您将如何同步服务器和客户端的合同?我解决了这个问题,渲染我所有的命令和查询到一个javascript。在我的情况下,我使用t4模板引擎,但任何模板引擎都可以使用。你可以在这里阅读更多

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

至于传输,我认为REST是好的,如果你使用例如。net WebApi并正确使用async关键字,框架将重用线程当有I/O等待(DB等)

相关内容

  • 没有找到相关文章

最新更新