1

我正在使用基于 websocket 的 MVC 架构,这个 MVC 生命周期类似于 Spring 和 Struts,现在我必须支持定期更新我的视图。

  1. 每个控制器负责客户端中存在的每个视图
  2. 控制器必须定期更新视图
  3. 我没有为每个客户维护任何会话。所以控制器必须为所有客户端更新。
  4. 我不想在 Controller 中创建线程,因为每个视图都有很多控制器。
  5. 所以,我想创建一个单独的模块,它必须通过控制器(通过调用控制器方法)来处理这个定期更新。
  6. 最后,我想保留客户端只是为了显示,所以我不想在客户端保留计时器。

我想遵循一些标准的方式来设计这个,请帮助我遵循标准的设计模式(如 MVC)来做到这一点。

4

1 回答 1

0

一个弹簧两分钱,一个 websocket 程序员的 struts 程序员。

1.每个控制器负责客户端中存在的每个视图 [好设计,希望你没有过度工程]

第 2 点和第 3 点。

方法 1 - 由于没有会话,因此要求您的 UI/视图在特定间隔(例如 2 分钟)或特定事件(例如页面刷新/重新加载)之后向控制器发送更新请求,以满足您的要求。

该方法的缺点 - UI/View 端代码的频繁更新可能会使您的应用程序瘫痪,因为客户端代码可以更改并用于攻击应用程序。

为避免这种情况,您需要注意每个请求本身是真实的和完整的,并且可以独立执行。

该方法的优点 - 考虑扩展应用程序,它可以像任何东西一样扩展。

第 4 点和第 5 点它们是相似的

 controller {
    doSomething(){};
 }

或者

 controller {
 HelperCalssReference.doSomething(){};
 }

您将始终在控制器内部获得一个线程[就执行速度而言],但第二种方法更加解耦。

第 6 点和第 3 点。

“客户端没有计时器”然后在服务器端维护会话但是“我没有为每个客户端维护任何会话”你必须将它保留在某个地方进行选择。

不要在服务器上维护会话,但必须跟踪客户端并在 2 分钟后向他们发送新的更新,但是如果你想在服务器进行 5 次更新后停止说,你将如何知道何时停止或客户端离线您很好,但您的客户端 UI 可能在线并等待更新。

点是在您的程序中有一个逻辑断点,但在上述要求中找不到。

可能的方法 -

  1. 使用 REST 可保持应用程序可扩展且无状态。[ https://capgemini.github.io/architecture/is-rest-best-microservices/ 必须阅读“设计/实现/配置难度”部分]
  2. 使用好莱坞设计原则,但决定谁是您的好莱坞 UI/视图或服务器。
  3. 事件驱动的方法可以帮助让用户事件决定何时要求更新 [注意客户端通过多次点击在 1 秒内要求 3 次更新。]

快乐的设计:)

于 2017-05-08T08:30:47.160 回答