IM伺服器的架構

2021-07-06 03:08:21 字數 2442 閱讀 2293

一、 總的構架結構示意圖:

如上圖所示,目前系統總的分成六個模組,分別為

網路/協議解析模組,使用者帳號管理模組,訊息處理模組,動作處理模組,資料均衡處理模組,客戶狀態處理模組 。 

正常流程應該這麼實現,以乙個或者幾個執行緒執行網路/協議解析模組,然後他根據具體的包型別分發給具體的命令處理模組,每個具體的命令處理模組 至少應該分別執行於不同的執行緒。 

從上面的結構圖可以看出,其中客戶狀態模組和網路/協議解析模組都是公用模組,其他的模組幾乎都依賴於這兩個模組。目前因為很多功能不予以實現,例如不實現離線訊息,所以只有使用者帳號管理模組跟資料庫相關。 

二、 每個模組的具體功能描述

1. 使用者帳號管理模組:

該模組管理基於使用者帳號的所有操作:具體由如下:建立使用者,刪除用 戶,修改使用者資料,修改使用者密碼,得到使用者個人資訊,得到好友列表,登陸,登出,請求認證串,建立群組,加入群組,離開群組。 

以上所有操作,除了建立使用者不需要登陸外,其他的任何操作都必須是已經登陸的使用者,所以必須先有登陸操作,才能進行下一步的操作,這條規則針對 所有的命令都是。 

描述一下登陸過程: 

客戶端傳送命令請求得到認證串——〉網路/協議解析模組把客戶端請求以及它的使用者標誌**給使用者帳號管理模組 ——〉使用者帳號管理模組自動生成乙個隨機認證串,同時把該客戶端的使用者標誌一起儲存在列表中(在列表中該資料只能儲存一分鐘,超過則刪除,因此客戶端必須 在一分鐘內利用此認證串登陸),同時把認證串由網路/協議解析模組傳送給客戶端——〉客戶端把使用者名稱和認證串、使用者名稱、密碼組成的新串的md5一併發給服 務器請求登陸——〉網路/協議解析模組把客戶端請求以及它的使用者標誌**給使用者帳號管理模組——〉使用者帳號管理模組首先檢查列表中是否有該使用者標誌的數 據,如果有則繼續——〉從資料庫中取出使用者名稱和密碼,然後從列表中取出認證串,生成md5,看是否一致,如果一致,則表示登陸成功,伺服器生成會話加密密 鑰,以後的所有與伺服器的會話資訊都採用此金鑰加密和解密——〉網路/協議解析模組把結果傳送給客戶端,如果成功——〉網路/協議解析模組把該使用者的使用者 標誌和會話加密金鑰儲存在客戶狀態模組中。 

2. 網路/協議解析模組: 

任何時候收到使用者的訊息,則要更新登陸使用者列表的快取中的最後訪問時間資料,如果該使用者不在列表中,但是最後檢查已經登陸,則要新增。還有心跳 命令不應該影響該列表的使用者資料。但是心跳命令會影響客戶狀態列表。 

網路解析模組應該儲存乙個使用者標誌對映列表(也可以直接組合他們的資料位址),把客戶端的ip位址和埠對映到乙個具體的唯一客戶端標誌值,然 後這個值以後作為這個客戶端的標誌,各個具體模組對客戶端的任何操作都以這個標誌為基礎。 

有四個功能 

第一,根據不同的型別把資料報解密後(如果需要解密)分發給各個具體的處理模組。在分發前,首先檢查該使用者是否登陸,如果 沒有,則直接告訴客戶端乙個錯誤。對於新建使用者,登陸命令,獲取認證字串的命令不需要檢查是否已經登陸。 

第二,自己處理相關的訊息,目前自己 處理的訊息包括心跳訊息和客戶端請求建立直連的命令,還有任何資料報的格式不對或者版本不對的情況處理,則該模組自己就處理了。 

第三,把使用者發 送訊息時的狀態提交給客戶狀態模組,其中包括使用者唯一標誌。如果使用者在傳送訊息時,位址已經修改了,那麼唯一標誌必須保持不變,但是使用者標誌列表中的使用者 位址資料必須跟著修改。 

第四,包各個模組傳送給客戶端的訊息加密後(如果需要)處理傳送給客戶端。 

3. 客戶狀態模組: 

該模組的功能如下: 

4. 訊息處理模組: 

處理所有的訊息**,包括群訊息,好友訊息。 

如果是場景中的公有訊息,則先檢查該使用者所在場景的位置,然後計算出能夠聽到該使用者的場景 中的其他使用者的使用者列表,然後給每個人傳送訊息。計算的演算法參考每個場景使用者的座標,其中在特定場景中的使用者不參與運算,除非在同乙個的特定場景中的使用者 才參與運算。 

注意:對於場景訊息,如果客戶端不是以場景方式登入的,那麼就不能傳送和接收場景訊息。 

除了以上的訊息,還有廣告訊息,系統訊息之外客戶端可以接受外,陌生人不能互發訊息,如果伺服器接受到此列訊息,必須忽略,不傳送任何應答。 

5. 動作處理模組: 

處理所有場景動作,該訊息只有場景使用者方式登入的才能傳送和接收動作命令。伺服器接收使用者的動作命令,計算出用 戶所在的場景中能夠看到的人的列表,然後一一傳送命令給該使用者。計算的演算法參考每個場景使用者的座標,其中在特定場景中的使用者不參與運算,除非在同乙個的特 定場景中的使用者才參與運算。 

該模組中儲存有乙個使用者的位置和動作狀態表(包括是否在某個特定的場景裡面資訊),儲存場景使用者的所在場景使用者的座標和最後一次的動作狀態信 息。 

場景使用者登入後,位置每更新一次,都必須把該使用者所在的場景位置座標傳送給伺服器,對於心跳資訊和動作資訊不需要攜帶位置座標資料。

6. 資料均衡處理模組: 

該模組主要為了分布式處理,伺服器負載平衡而設計,主要發出網路伺服器重定向的命令,對於這些命令,所有客 戶端都必須處理,因為一旦伺服器發出了這個命令後,就在此伺服器不再儲存該使用者資訊了。 

目前該模組不實現。

IM伺服器的架構

一 總的構架結構示意圖 如上圖所示,目前系統總的分成六個模組,分別為 網路 協議解析模組,使用者帳號管理模組,訊息處理模組,動作處理模組,資料均衡處理模組,客戶狀態處理模組。正常流程應該這麼實現,以乙個或者幾個執行緒執行網路 協議解析模組,然後他根據具體的包型別分發給具體的命令處理模組,每個具體的命...

IM伺服器的架構

如上圖所示,目前系統總的分成六個模組,分別為網路 協議解析模組,使用者帳號管理模組,訊息處理模組,動作處理模組,資料均衡處理模組,客戶狀態處理模組 正常流程應該這麼實現,以乙個或者幾個執行緒執行網路 協議解析模組,然後他根據具體的包型別分發給具體的命令處理模組,每個具體的命令處理模組 至少應該分別執...

IM 開源專案 登入伺服器 1

1.協議 l 客戶端 服務端 c s udp l 服務端 服務端 s s udp tcp 2.網路模型 l windows 完成埠 l linux epoll 暫不提供 3.效能引數 l 最大連線數 100000 ids 每台 l 最小頻寬要求 1mb byte 每台 1.伺服器集群設計 登入服務,...