這將是一個相當理論化的問題。我目前正在研究我的學士論文,其中包括創建web-based real-time對象同步框架,很像Firebase,但是本地(即不是基於雲)。
我需要從實時的角度區分「常規」Web應用程序(有更好的術語?),尤其是在架構方面。我的想法至今:實時Web應用程序的體系結構
- 一個普通的web應用程序是基於客戶 - 服務器模型,即「客戶端和服務器交換消息的請求 - 響應消息模式:客戶端發送一個請求,服務器返回響應。」
- 實時Web應用程序維護客戶端和服務器之間的持久連接。兩者都可以通過該連接同時發送和接收消息,並且彼此獨立(全雙工)。
- 我的導師(從應用軟件工程的主席)指出上述觀點已經有資格爲Peer-to-Peer架構的應用程序,雖然他不太清楚。我還沒有確信,因爲a)同行不同質,b)服務器仍然是一個集中式系統,c)我們仍然使用術語「服務器」和「客戶端」。
- 服務器不直接將消息發送到特定的客戶端,但使用publish-subscribe消息傳遞模式,即,客戶機連接到一個消息信道,並且當服務器在相應的信道發佈它接收到一個消息。因此服務器實際上並不知道它的客戶端,儘管他知道可能是。
- 主要使用情形如下:客戶端將消息發送到服務器(例如,創建新的待辦事項時),服務器處理它(例如,新的待辦事項寫入數據庫),最後分派消息到所有其他訂閱的客戶端。我想起了mediator pattern,雖然它是一種行爲模式,而不是建築模式。
- 但還有另一種使用情況:服務器發送它自己的協議(例如,它可識別的待辦事項到期日超過其刪除),以訂閱的客戶機的消息。所以溝通並不總是從客戶端開始。
對不起,它得到了超過預期。把它概括地說,我看到三種可能的基於網絡的實時應用程序的架構:
- 對等網絡(異構同行)
- 客戶端 - 服務器與發佈 - 訂閱消息傳遞模式和調解員(如果架構後事項)
- 你有完全不同的東西;-)
不知道它的重要性在所有讓我感到吃驚,但我用Rails(用JMS基消息服務,提供WebSocket - 支持)在後端和AngularJS在前端。
唯一的主要區別在於實時Web應用程序實時運行。這消除了不支持實時更新客戶端的任何體系結構。 AFAICT完全回答你所問的問題。 –
@RobertHarvey謝謝你的回答。所以你的觀點是,只要服務器可以實時更新客戶端,架構實際上並不重要。它可能是P2P,客戶端服務器或其他? – nubbel