歡迎閱讀我的開源項目《迷你微信》服務器與《迷你微信》客戶端
《迷你微信》服務器端是使用java語言,Mina框架編寫的,一個良好的架構關系到后期迭代的方便程度和異常的出現頻率問題,其中,解耦是一個很重要的關注點。帖主雖然沒有做過大的研究,不過目前這種架構還是能滿足需求的。
整體架構廢話不多說,先上圖!

從上往下看,首先Server類開啟了整個服務器進程,在這里,并沒有將Spring給畫出來,因為Spring只是一個框架。
在Server類的Main函數中,調用了Spring,進行所有類的實例化和依賴注入。
接下來,是初始化方法init()的調用,ServerModel和ServerNetwork兩個類的初始化方法都是Server在完成Spring的流程后進行調用的,這樣可以保證初始化的順序,防止初始化時參數依賴導致的問題。
ServerModel保存著服務器運行時的數據(比如用戶信息,聊天消息等)和對這些數據的封裝操。
而ServerNetwork則是《迷你微信》服務器的網絡模塊,負責接收,發送數據,其中MinaEncoder、MinaDecoder、MyLogger是以聚合的方式使用在ServerNetwork中。
ClientRequest_Disptcher是客戶端請求的分發器,職責是根據客戶端請求類型,將請求分發給不同的“請求處理器”進行處理。
大家可以看到,有3個“請求處理器”,分別是Server_Chatting、Server_User、Server_Friend,帖主將其合在一個組合片段中,這三個類都繼承于Server_Processor這個基類,Server_Processor僅僅是將三個子類共同的代碼——get,set ServerModel、ServerNetwork兩個類的引用提取到基類,減少重復代碼,而且一旦需求拓展,有了新的“請求處理器”,也同樣是繼承于Server_Processor這個基類。
Server_Chatting,用于處理微信中聊天的相關請求,比如發送聊天消息、創建群聊、修改群信息、修改群成員等等功能。
Server_User,用于處理微信中的用戶個人的相關請求,比如登陸、注冊、注銷、修改個人信息等等功能。
Server_Friend,用于處理微信中用戶好友的相關請求,比如查找用戶、添加好友、刪除好友等等功能。
仔細往下看看,可能你會感到奇怪ServerModel_Chatting這個類是干啥的呢?為啥“請求處理器”中唯獨Server_Chatting調用了這樣一個類呢?這涉及到發送消息的接受者不在線等一系列問題,詳細的說明我們將在后面的博客中進行說明。
接著是數據庫的兩個類:HibernateDataOperation 和 HibernatesessionFactory,首先HibernateSessionFactory是進行Hibernate數據庫的連接和獲取Session與最后的提交處理的,而HibernateDataOperation則將Hibernate的一些方法進行了封裝,這樣做的原因,請參考博客【迷你微信】基于MINA、Hibernate、Spring、Protobuf的即時聊天系統:5.技術簡介之Hibernate
隨著軟件的開發使用,可能會漸漸的拓展新功能,那么,服務器也就要相應的加上對新功能的處理,這也是迭代開發方式所需要和體現的效果。
由于使用Spring的依賴注入方式創建了本服務器端的絕大多數類的實例對象,所以可以說,
ServerModel、ServerNetwork、ClientRequest_Disptcher、Server_Chatting、Server_User、Server_Friend都是單例,所以這其間的許多類都是擁有者其他幾個類的引用,而HibernateDataOperation 和 HibernateSessionFactory則是提供靜態方法來進行調用,故使用起來其實是很方便的。
當需要進行功能層次的拓展時,您可以在組合片段 Process request 內添加新的“請求處理器”,新的處理器需要繼承于Server_Processor這個基類,在里面實現了功能即可。當客戶端的請求來臨時,首先會被ServerNetwork的Filter(詳細請參考【迷你微信】基于MINA、Hibernatye、Spring、Protobuf的即時聊天系統:2.技術簡介之MinaFilter_1)MinaEncoder打包成一個NetworkPacket包,接著通過ClientRequest_Disptcher進行分析后轉發,若是屬于新功能,則將轉發到您新編寫的“請求處理器”中。
關于ClientRequest_Disptcher中如何辨別請求類型,請看下篇博客[【迷你微信】基于MINA、Hibernatye、Spring、Protobuf的即時聊天系統:8.自定義傳輸協議]。
歡迎閱讀我的開源項目《迷你微信》服務器與《迷你微信》客戶端
新聞熱點
疑難解答