項目結構設計
- 1.項目模塊劃分
- 2.業務處理模塊子模塊的劃分
- 3.實用工具類模板的實現
- 3.1 日志宏的實現
- 3.2 mysql工具
- 3.3 JsonCpp工具
- 3.4 string-Split工具 && file_util工具
1.項目模塊劃分
● 數據管理模塊:依托 MySQL 數據庫,負責用戶數據的存儲與管理,如注冊信息、游戲記錄等,為系統提供數據支撐。
● 前端界面模塊:基于 JavaScript 開發,實現注冊、登錄、游戲大廳、游戲房間等頁面的動態交互,同時處理與服務器的通信,確保用戶操作(如匹配、對戰、聊天)的實時反饋。
● 業務處理模塊:搭建 WebSocket 服務器,作為客戶端與服務器的通信橋梁,接收并處理各類業務請求(如用戶認證、對戰邏輯、消息轉發等),是系統的核心業務處理層。
2.業務處理模塊子模塊的劃分
- 網絡通信模塊
○ 基于websocketpp庫,搭建 HTTP 和 WebSocket 服務器,提供網絡通信能力,支持客戶端與服務器的實時數據傳輸,是系統的通信基礎。 - 會話管理模塊
○ 利用cookie&session機制,在 HTTP 短連接場景下識別客戶端身份,維持會話狀態,解決 HTTP 無狀態特性,確保用戶身份一致性。 - 在線管理模塊
○ 管理游戲大廳和房間內用戶,監控在線狀態,提供連接獲取接口,支持實時對戰和聊天的用戶狀態跟蹤,確保離線用戶不參與實時交互。 - 房間管理模塊
○ 為匹配成功用戶創建對戰房間,處理五子棋對戰(落子校驗、勝負判斷、棋盤同步)和聊天業務(消息廣播),封裝房間內業務邏輯,隔離多房間狀態。 - 用戶匹配模塊
○ 按天梯分數分層匹配玩家,匹配成功后創建房間并加入用戶,實現公平高效的玩家匹配,減少等待時間,提升對戰體驗。
3.實用工具類模板的實現
實用工具類模板主要負責提前實現一些代碼中會用到的邊緣代碼,提前實現了就可以在項目中直接使用了。
3.1 日志宏的實現
在實現項目中,肯定會遇到bug,以及在項目上線之后也要定期觀察項目的情況
所以日志的實現大致思想就是:設置一些日志等級,在測試項目的時候要打印出信息,項目上限之后把日志打印到文件中。
介紹一下關于時間戳的一些函數
time_t time(NULL) 獲取時間戳
struct tm localtime(time_t * t) 根據時間戳生成時間格式
char strftime (char buff,int max,char* format, struct tm tm) 組織結構
int fprintf(FILE fp,char* fromat,…) 寫入文件
#define INF 0
#define DBG 1
#define ERR 2
#define DEFAULT_LOG_LEVEL INF
//獲得時間戳,將時間戳轉換為一個時間結構,按照一定的格式放在指定空間中
#define LOG(level,format,...) do{\if(DEFAULT_LOG_LEVEL>level) break;\time_t t=time(NULL);\struct tm* lt=localtime(&t);\char buff[32]={0};\strftime(buff,31,"%H:%M:%S",lt);\fprintf(stdout,"[%s %s:%d] " format "\n",buff,__FILE__,__LINE__, ##__VA_ARGS__);\
}while(0)
//使用 do-while(0) 結構, 將多條語句組合成一個代碼塊,確保宏在展開時能夠像一條語句一樣使用
//##__VA_ARGS__是可變參數列表的占位符,## 用于處理可變參數為空的情況
#define ILOG(format,...) LOG(INF,format,##__VA_ARGS__)
#define DLOG(format,...) LOG(DBG,format,##__VA_ARGS__)
#define ELOG(format,...) LOG(ERR,format,##__VA_ARGS__)
3.2 mysql工具
這個工具主要用于數據庫的連接&&初始化,句柄的銷毀,語句的執行
3.3 JsonCpp工具
實現序列化和反序列化
3.4 string-Split工具 && file_util工具
一個是對字符串的分割,一個是文件數據的讀取功能(對html文件數據進行讀取)