在开发实时单页应用程序的过程中,我逐渐采用了websocket,以向用户提供最新数据。在这个阶段,我很伤心地看到,我被摧毁了太多我的应用程序的结构,和我没能找到一个解决这种现象。
在详细介绍之前,请先介绍一下上下文:
- 该webapp是实时SPA;
- 后端在Ruby on Rails中。实时事件由Ruby推送到Redis密钥,然后微节点服务器将其拉回并推送到Socket.Io;
- 前端位于AngularJS中,并直接连接到Node中的socket.io服务器。
在服务器端,在实时之前,我对资源进行了明确的基于控制器/模型的分离,每个过程都附加有处理。当我开始通过Websocket向用户推送内容时,这种经典的MVC设计就被完全粉碎,或者至少被绕开了。现在,我有一个管道,所有应用程序都将向下流动或多或少的结构化数据。而且我感到压力很大。
在前端,主要关注的是业务逻辑的重复。当用户加载页面时,我必须通过经典的AJAX调用加载模型。但是我还必须处理实时数据泛滥,而且我发现自己复制了很多客户端业务逻辑,以保持客户端模型的一致性。
经过一些研究,我找不到任何好的文章,文章,书籍或任何能给人们提供建议的关于如何可以并且应该如何设计现代Web应用程序体系结构的建议,并且要牢记一些特定的主题:
- 如何构造从服务器发送给用户的数据?
- 我应该只发送诸如“此资源已更新,您应该通过AJAX调用重新加载它”之类的事件,还是推送更新的数据并替换通过初始AJAX调用加载的先前数据?
- 如何为发送的数据定义一个一致且可扩展的框架?这是模型更新消息还是“ blahblahblah出现错误”消息
- 如何不从后端的任何地方发送有关所有内容的数据?
- 如何减少服务器和客户端上的业务逻辑重复?