【五子棋在線對戰】二.項目結構設計 實用工具類模板的實現

項目結構設計

  • 1.項目模塊劃分
  • 2.業務處理模塊子模塊的劃分
  • 3.實用工具類模板的實現
    • 3.1 日志宏的實現
    • 3.2 mysql工具
    • 3.3 JsonCpp工具
    • 3.4 string-Split工具 && file_util工具

1.項目模塊劃分

● 數據管理模塊:依托 MySQL 數據庫,負責用戶數據的存儲與管理,如注冊信息、游戲記錄等,為系統提供數據支撐。
● 前端界面模塊:基于 JavaScript 開發,實現注冊、登錄、游戲大廳、游戲房間等頁面的動態交互,同時處理與服務器的通信,確保用戶操作(如匹配、對戰、聊天)的實時反饋。
● 業務處理模塊:搭建 WebSocket 服務器,作為客戶端與服務器的通信橋梁,接收并處理各類業務請求(如用戶認證、對戰邏輯、消息轉發等),是系統的核心業務處理層。

2.業務處理模塊子模塊的劃分

  1. 網絡通信模塊
    ○ 基于websocketpp庫,搭建 HTTP 和 WebSocket 服務器,提供網絡通信能力,支持客戶端與服務器的實時數據傳輸,是系統的通信基礎。
  2. 會話管理模塊
    ○ 利用cookie&session機制,在 HTTP 短連接場景下識別客戶端身份,維持會話狀態,解決 HTTP 無狀態特性,確保用戶身份一致性。
  3. 在線管理模塊
    ○ 管理游戲大廳和房間內用戶,監控在線狀態,提供連接獲取接口,支持實時對戰和聊天的用戶狀態跟蹤,確保離線用戶不參與實時交互。
  4. 房間管理模塊
    ○ 為匹配成功用戶創建對戰房間,處理五子棋對戰(落子校驗、勝負判斷、棋盤同步)和聊天業務(消息廣播),封裝房間內業務邏輯,隔離多房間狀態。
  5. 用戶匹配模塊
    ○ 按天梯分數分層匹配玩家,匹配成功后創建房間并加入用戶,實現公平高效的玩家匹配,減少等待時間,提升對戰體驗。

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文件數據進行讀取)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/83558.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/83558.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/83558.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

53 python akshare(獲取金融數據)

在金融數據獲取與分析領域,AkShare是一個強大且靈活的開源庫,它提供了豐富的金融數據接口,覆蓋股票、期貨、期權、基金、債券、外匯等多個金融市場。AkShare更專注于中國金融市場數據,并且支持從多個數據源獲取數據,具有更高的穩定性和更全面的數據覆蓋。 一、安裝akshar…

藍橋杯17114 殘缺的數字

問題描述 七段碼顯示器是一種常見的顯示數字的電子元件,它由七個發光管組成: 圖依次展示了數字 0~9 用七段碼來顯示的狀態,其中燈管為黃色表示點亮,灰色表示熄滅。根據燈管的亮暗狀態,我們可以用一個狀態碼(狀態碼是一個 7 位的…

Java觀察者模式深度解析:構建松耦合事件驅動系統的藝術

目錄 觀察者模式基礎解析核心結構與實現原理Java內置觀察者實現Spring框架中的高級應用典型應用場景與實戰案例觀察者模式變體與優化常見問題與最佳實踐總結與未來展望1. 觀察者模式基礎解析 1.1 模式定義與核心思想 觀察者模式(Observer Pattern)是一種行為型設計模式,它…

NocoBase v1.7.0 正式版發布

原文鏈接:https://www.nocobase.com/cn/blog/nocobase-1-7-0。 新特性 用戶角色并集 角色并集是一種權限管理模式,根據系統設置,系統開發者可以選擇使用獨立角色、允許角色并集,或者僅使用角色并集,以滿足不同的權限…

破解通信難題,modbus轉profibus網關在高爐水沖渣系統中穩定好用

基于在高爐水沖渣傳動監控系統的工藝背景下,穩聯技術Profibus-Modbus網關在控制系統中使支持Profibus協議的設備與支持Modbus RTU協議的設備之間進行通訊協議轉換的作用,使得支持不同通訊協議的設備之間能夠進行數據傳遞,并且給出了設計方法.應用Profibus-Modbus總線橋WL-ABD30…

開源是什么?我們為什么要開源?

本片為故事類文章推薦聽音頻哦 軟件自由運動的背景 夢開始的地方 20世紀70年代,軟件行業處于早期發展階段,軟件通常與硬件捆綁銷售,用戶對軟件的使用、修改和分發權利非常有限。隨著計算機技術的發展和互聯網的普及,越來越多的開…

Educational Codeforces Round 179 (Rated for Div. 2)(A-E)

題目鏈接:Dashboard - Educational Codeforces Round 179 (Rated for Div. 2) - Codeforces A. Energy Crystals 思路 貪心地模擬一下過程很容易就看出來了,每次變成盡可能大的數 1 1 0 -> 1 1 3 -> 3 3 5 -> 5 5 11....我們只需要關注最大…

React Native開發鴻蒙運動健康類應用的項目實踐記錄

??項目名稱??:HarmonyFitness - 基于React Native的鴻蒙運動健康應用 ??技術棧??:React Native 0.72.5 TypeScript HarmonyOS API ArkTS原生模塊 一、環境搭建與項目初始化 ??雙環境配置?? ??React Native環境??: npx re…

Linux --UDP套接字實現簡單的網絡聊天室

一、Server端的實現 1.1、服務端的初始化 ①、創建套接字&#xff1a; 創建套接字接口&#xff1a; #include <sys/types.h> /* See NOTES */ #include <sys/socket.h> int socket(int domain, int type, int protocol); //1. 這是一個創建套接字的接…

Eureka 高可用集群搭建實戰:服務注冊與發現的底層原理與避坑指南

引言&#xff1a;為什么 Eureka 依然是存量系統的核心&#xff1f; 盡管 Nacos 等新注冊中心崛起&#xff0c;但金融、電力等保守行業仍有大量系統運行在 Eureka 上。理解其高可用設計與自我保護機制&#xff0c;是保障分布式系統穩定的必修課。本文將手把手帶你搭建生產級 Eur…

Spring Boot應用開發實戰

Spring Boot應用開發實戰&#xff1a;從零到生產級項目的深度指南 在當今Java生態中&#xff0c;Spring Boot已占據絕對主導地位——據統計&#xff0c;超過75%的新Java項目選擇Spring Boot作為開發框架。本文將帶您從零開始&#xff0c;深入探索Spring Boot的核心精髓&#xf…

yum更換阿里云的鏡像源

步驟 1&#xff1a;備份原有源配置&#xff08;重要&#xff01;&#xff09; sudo mkdir /etc/yum.repos.d/backup sudo mv /etc/yum.repos.d/CentOS-* /etc/yum.repos.d/backup/步驟 2&#xff1a;下載阿里云源配置 sudo curl -o /etc/yum.repos.d/CentOS-Base.repo https:…

【算法訓練營Day06】哈希表part2

文章目錄 四數相加贖金信三數之和四數之和 四數相加 題目鏈接&#xff1a;454. 四數相加 II 這個題注意它只需要給出次數&#xff0c;而不是元組。所以我們可以分治。將前兩個數組的加和情況使用map存儲起來&#xff0c;再將后兩個數組的加和情況使用map存儲起來&#xff0c;ke…

JS手寫代碼篇---手寫apply方法

11、手寫apply方法 apply方法的作用&#xff1a; apply 是一個函數的方法&#xff0c;它允許你調用一個函數&#xff0c;同時將函數的 this 值設置為指定的值&#xff0c;并將函數的參數作為數組&#xff08;或類數組對象&#xff09;傳遞給該函數。 與call的區別&#xff1…

冪等性:保障系統穩定的關鍵設計

冪等性&#xff08;Idempotence&#xff09; 是計算機科學和分布式系統中的核心概念&#xff0c;指同一操作重復執行多次所產生的效果與執行一次的效果相同。這一特性對系統容錯性、數據一致性至關重要&#xff0c;尤其在網絡通信&#xff08;如HTTP&#xff09;和數據庫設計中…

electron定時任務,打印內存占用情況

// 監聽更新 function winUpdate(){// 每次執行完后重新設置定時器try {// 獲取當前時間并格式化為易讀的字符串const now new Date();const timeString now.toLocaleString();console.log(當前時間: ${timeString});// 記錄內存使用情況&#xff08;可選&#xff09;const m…

華為手機開機卡在Huawei界面不動怎么辦?

遇到華為手機卡在啟動界面&#xff08;如HUAWEI Logo界面&#xff09;的情況&#xff0c;可依次嘗試以下解決方案&#xff0c;按操作復雜度和風險由低到高排序&#xff1a; &#x1f527; 一、強制重啟&#xff08;優先嘗試&#xff09; 1.通用方法? 長按 ?電源鍵 音量下鍵?…

Python爬蟲之數據提取

本章節主要會去學習在爬蟲中的如何去解析數據的方法&#xff0c;要學習的內容有&#xff1a; 響應數據的分類結構化數據如何提取非結構化數據如何提取正則表達式的語法以及使用jsonpath解析嵌套層次比較復雜的json數據XPath語法在Python代碼中借助lxml模塊使用XPath語法提取非…

并行智算MaaS云平臺:打造你的專屬AI助手,開啟智能生活新紀元

目錄 引言&#xff1a;AI助手&#xff0c;未來生活的必備伙伴 并行智算云&#xff1a;大模型API的卓越平臺 實戰指南&#xff1a;調用并行智算云API打造個人AI助手 3.1 準備工作 3.2 API調用示例 3.3 本地智能AI系統搭建 3.4 高級功能實現 并行智算云的優勢 4.1 性能卓越…

三維坐標轉換

如果坐標(x,y,z)->(y,-z,-x)可以使用坐標系&#xff1a; import mathdef mat_vec_mult(matrix, vector):"""將 3x3 矩陣與 3x1 向量相乘。參數&#xff1a;matrix: 3x3 的旋轉矩陣vector: 3x1 的向量返回&#xff1a;3x1 的結果向量"""resul…