TeamTalk---服務端架構

1 概略介紹

TTServer主要包含了以下幾種服務器:

  • LoginServer (C++): 登錄服務器,分配一個負載小的MsgServer給客戶端使用
  • MsgServer (C++):  消息服務器,提供客戶端大部分信令處理功能,包括私人聊天、羣組聊天等
  • RouteServer (C++):  路由服務器,爲登錄在不同MsgServer的用戶提供消息轉發功能
  • FileServer (C++): 文件服務器,提供客戶端之間得文件傳輸服務,支持在線以及離線文件傳輸
  • MsfsServer (C++): 圖片存儲服務器,提供頭像,圖片傳輸中的圖片存儲服務
  • DBProxy (JAVA): 數據庫代理服務器,提供mysql以及redis的訪問服務,屏蔽其他服務器與mysql與redis的直接交互

2 當前支持的功能點:

	私人聊天
	羣組聊天
	文件傳輸
	多點登陸
	組織架構設置

3 代碼結構:


1.Base文件夾:

       主要封裝一些服務端需要使用的基礎庫,主要包括Json庫,線程庫(線程,線程池),網絡庫(Soket封裝,事件分發),文件處理庫(buf管理,配置文件解析類)等需要經常使用的基礎庫。

 

2.db_proxy_server文件夾

        數據庫管理模塊(服務器),用來管理數據庫,接受msg_server發送的消息,進行數據庫操作,操作完成後返回給msg_server

 

3.file_server文件夾:

       文件操作模塊(服務器),件服務器,提供客戶端之間得文件傳輸服務,支持在線以及離線文件傳輸

4.login_server文件夾

          一臺負載均衡服務器,用來通知客戶端連接到負載最小的msg_server,在整個TT架構中,可以簡單的理解爲一個負載均衡的作用,在login_server中,同樣在內存中維護了所有的msg_server的地址以及其目前的負載情況。  

 

5.route_server文件夾

      一臺消息轉發服務器,客戶端消息發送到msg_server。msg_server判斷接收者是否在本地,是的話,直接轉發給目標客戶端。否的話,轉發給route_server,route_server接收到msg_server的消息後,獲取to_id所在的msg_server,將消息轉發給msg_server。msg_server再將消息轉發給目標接收者。

----- route_server在整個tt中的作用是一個消息轉發的地方,其在內存中維護了全局用戶信息。當有多個msg_server的時候,route_server的作用就是在多個          msg_server之間中轉消息。

-----g_rs_user_map是一個hash_map,保存了全局用戶信息,當有用戶上線的時候,msg_server會將該用戶的狀態發送到route_server,route_server就會在g_rs_user_map裏面插入一條記錄。


6.msg_server文件夾

      客戶端連接服務器(N臺)。客戶端通過msg_server登陸,保持長連接。 

-----msg_server啓動後會去主動連接login_server,並通過數據包CImPduMsgServInfo向login_server註冊自己的信息。

-----當有用戶連接上msg_server並登錄成功或者用戶斷開連接的時候,會向login_server發送一個CImPduUserCntUpdate數據包通知login_server    ,login_server收到後,修改對應msg_server的負載值。

-----當有用戶連接上msg_server並登錄成功或者用戶斷開連接的時候,會向route_server發送一個CImPduUserStatusUpdate數據包通知route_server,route_server記錄用戶的msg_server,msg_server啓動後會去主動連接route_server,並通過數據包CImPduOnlineUserInfo向route_server報告自己當前在線的用戶情況。


7.file_server文件夾

      文件服務器,提供客戶端之間得文件傳輸服務,支持在線以及離線文件傳輸


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章