集群聊天服務器專案總結
首先,我是在Linux下使用VScode進行專案的開發,通過Cmake構建專案,使用gdb進行專案問題的除錯,專案完成后通過Linux shell輸出專案編譯腳本,并把專案托管到我的GitHub上,
這個專案分為4個模塊,首先,第一個模塊是網路模塊,我通過深入剖析muduo網路庫的核心組件,采用C++11重寫muduo庫的核心組件,將依賴于boost庫的技術點轉化為C++11的知識點,使其脫離boost庫,實作出一套網路庫來使用,使用這個網路庫的好處是:解耦了網路模塊的代碼和業務層的代碼,能夠讓開發者專注于業務層的開發,然后第二個模塊是業務模塊,也就是是服務層,我使用了C++11的一些技術,比如說,map,系結器,函式物件,做了一個訊息id和這個訊息發生以后的回呼操作的系結,相當于是做了一個回呼機制,當這個網路I/O給服務器通知有訊息請求,服務器處理客戶注冊的讀事件的回呼操作(OnMessage),通過訊息請求,從訊息里面(buffer)決議出這個json,得到訊息id,通過回呼操作,就可以處理這個訊息了,第三個是資料存盤層,我使用的是MySQL,對于專案的關鍵的資料進行存盤,比如說,用戶的id,離線訊息,好友串列,群組串列的關系,都是在MySQL存盤,我還通過實作一個MySQL資料庫連接池,在專案代碼上還通過書寫model類對業務層封裝底層資料庫,提高MySQL資料庫的訪問效率,
在單機模式下,主要就是這3個模塊,但是單機的并發能力是有限的,所以,我考慮專案的整體的并發能力,讓專案可以支持多機的擴展,部署多臺網路服務器,前面需要掛1個Nginx負載均衡,這個專案是基于TCP的私有協議,自己去搭建的基于C/S模型的通信,所以我通過對Nginx的tcp的負載均衡配置,做一個長連接,因為是訊息聊天通信,客戶端不僅僅要給服務器主動發訊息,而且服務器還要主動給客戶端推訊息,所以必須是長連接,短連接做不到這個功能,因為短連接沒有辦法給客戶端推訊息,另外,在負載均衡里面,因為是各個服務器有不同的人進行注冊,不同服務器上注冊的用戶需要進行通信的話,我在這里引入了Redis作為一個MQ訊息佇列的功能,利用它的發布訂閱功能實作了跨服務器的訊息通信功能,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/307198.html
標籤:其他
