IM伺服器的架構

2021-06-20 13:43:00 字數 2421 閱讀 7790

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

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

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

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

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

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

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.伺服器集群設計 登入服務,...