这将是一个相当理论的问题。我目前正在写我的学士论文,其中包括创建一个非常类似于 Firebase的基于 Web 的实时对象同步框架,但是是本地的(即不是基于云的)。
我需要将“常规”Web 应用程序(有更好的术语吗?)与实时区分开来,尤其是在架构方面。到目前为止我的想法:
- 常规的 Web 应用程序基于客户端-服务器模型,即“客户端和服务器以请求-响应消息传递模式交换消息:客户端发送请求,服务器返回响应”。
- 实时 Web 应用程序维护客户端和服务器之间的持久连接。两者都可以通过该连接(全双工)同时且相互独立地发送和接收消息。
- 我的顾问(来自应用软件工程的主席)表示,上述观点已经使应用程序符合对等架构的要求,尽管他不太确定。我还不相信,因为 a)对等点不是同质的,b)服务器仍然是一个集中式系统,c)我们仍然使用术语“服务器”和“客户端”。
- 服务器不直接向特定客户端发送消息,而是使用发布-订阅消息模式,即客户端连接到消息通道并在服务器在相应通道中发布消息时接收消息。因此,服务器实际上并不知道它的客户端,尽管他可以知道。
- 主要用例如下:客户端向服务器发送消息(例如,当创建新的待办事项时),服务器处理它(例如,将新的待办事项写入数据库),最后将消息分派给所有其他订阅的客户。我想到了中介者模式,尽管它是一种行为模式,而不是架构模式。
- 但还有另一个用例:服务器自动向订阅的客户端发送消息(例如,它识别到待办事项的过期日期并将其删除)。因此,通信并不总是必须从客户端开始。
对不起,它比预期的要长。简而言之,我看到了基于 Web 的实时应用程序架构的三种可能性:
- 点对点(具有异构对等点)
- 具有发布-订阅消息模式和调解器的客户端-服务器(如果后者对架构很重要)
- 你用完全不同的东西给我惊喜;-)
不确定它是否重要,但我在后端使用Rails(带有基于JMS的消息传递服务,提供WebSocket支持),在前端使用AngularJS。