国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

【迷你微信】基于MINA、Hibernate、Spring、Protobuf的即時聊天系統:7.項目介紹之架構(1)

2019-11-15 00:08:31
字體:
來源:轉載
供稿:網友
【迷你微信】基于MINA、Hibernate、SPRing、Protobuf的即時聊天系統:7.項目介紹之架構(1)

歡迎閱讀我的開源項目《迷你微信》服務器與《迷你微信》客戶端

前言

《迷你微信》服務器端是使用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.自定義傳輸協議]。

歡迎閱讀我的開源項目《迷你微信》服務器與《迷你微信》客戶端


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 来凤县| 桓仁| 大厂| 白玉县| 方山县| 桃江县| 卢氏县| 青海省| 赤峰市| 玛纳斯县| 房产| 东平县| 抚宁县| 汤阴县| 乐亭县| 大安市| 若尔盖县| 林口县| 京山县| 惠水县| 外汇| 香格里拉县| 达拉特旗| 萨嘎县| 杭州市| 新沂市| 达日县| 义马市| 西畴县| 辉南县| 达尔| 巴彦县| 阳江市| 扎兰屯市| 额济纳旗| 万全县| 武鸣县| 东平县| 北流市| 共和县| 新安县|