拿到一套遊戲服務端原始碼,該從哪看起?
然而看懂一套自己並不熟悉的程式碼並不容易。其一是時間有限,工作中往往要求能夠快速上手;其二是新程式碼往往包含自己一些知識盲區,需要學習。於是編寫此文,總結一套看程式碼的方法和流程,以供參考。
第一步:看角色邏輯的編寫方式
遊戲服務端的最核心功能就是處理玩家邏輯,可以先從單服的邏輯看起。比如看看揹包模組、簽到模組的編寫方式,從而理解遊戲的邏輯組織。
一般而言,玩家邏輯會涉及如下圖的幾個部分,看程式碼時可以按照模組生命週期的流程跟著。當玩家上線時,需要載入資料;然後處理客戶端協議;下線前需要儲存資料。按照這個順序,看看每個步驟的寫法。
看過幾個模組後,便可以仿寫一些簡單的功能邏輯。對遊戲公司,這也是培養新人時,前期的要求。
第二步:看玩家上線到下線的整個流程
玩家從連線服務端,到他退出遊戲,中間一般會經歷如下圖的流程。
(圖片來源,《Unity3D網路遊戲實戰(第2版)》第七章通用服務端框架)
跟完這個流程,基本可以明白整個服務端的邏輯架構。比如有些遊戲服務端在gateway中處理連線,然後交由login服處理登入,再交給game服處理遊戲邏輯,可能還會有db服處理資料庫的讀取。那麼,一步步的跟進這個流程,就能夠把服務端各個部分的職能給聯絡起來,也能夠解決一些遊戲流程的問題。
第三步:看戰鬥邏輯的實現
遊戲中的一些核心功能,比如地圖、戰鬥往往較為複雜,還可能涉及跨服。看這部分程式碼的目的是從之前只能開發一些簡單的通用功能,擴充套件到能夠開發核心功能。
舉例來說,比如某款遊戲的戰鬥流程可能如下圖。當玩家進入匹配時,遊戲服會把玩家的一些資訊發到匹配服去做匹配;當匹配成功,服務端會建立一個戰鬥服,然後參與戰鬥的各個玩家切到戰鬥服去戰鬥。
那麼要關注的地方就有各個服務的職能是什麼,它們間的資料傳輸流程,以及傳輸了哪些資料。進而還需要了解角色在戰鬥服中的邏輯,比如戰鬥開始、戰鬥結束的處理,放技能傷害的計算。
第四步:技術實現細節
遊戲服務端涉及的內容其實很多,在按照以上三個步驟看程式碼後,基本就能夠在這套程式碼的基礎上做開發。但如果要修改一些底層功能,或者做效能優化,就要更加深入的看程式碼。
一般而言,以下的三個模組是重點,可以優先了解。
網路作為服務端的重點模組,可以瞭解該框架採用什麼方式處理多路連線,瞭解協議的設計。磁碟IO可能會是服務端的效能瓶頸,一般會通過快取機制來緩解,要了解服務端的儲存結構,知道儲存著什麼資料以及怎樣儲存。手遊很注重熱更新功能,作為保持伺服器穩定的一個重要手段,但做好熱更新並不容易,可以瞭解框架的熱更方案。
經由以上幾步,應能夠了解一套服務端程式碼,能在它的基礎上編寫邏輯,改動底層功能。
作者:羅培羽
相關文章
- VC++RTSP服務端(附原始碼)C++服務端原始碼
- Dubbo原始碼之服務端的釋出原始碼服務端
- Netty原始碼分析(二):服務端啟動Netty原始碼服務端
- Dubbo原始碼分析(五)Dubbo呼叫鏈-服務端原始碼服務端
- 模板,從服務端到客戶端服務端客戶端
- xxl-job原始碼閱讀二(服務端)原始碼服務端
- Netty原始碼解析 -- 服務端啟動過程Netty原始碼服務端
- Fabric 1.0原始碼分析(35)Peer #EndorserServer(Endorser服務端)原始碼Server服務端
- Go遊戲服務端框架從零搭建(一)— 架構設計Go遊戲服務端框架架構
- netty原始碼分析之服務端啟動全解析Netty原始碼服務端
- 聊聊Dubbo(九):核心原始碼-服務端啟動流程1原始碼服務端
- 聊聊Dubbo(九):核心原始碼-服務端啟動流程2原始碼服務端
- Nacos(二)原始碼分析Nacos服務端註冊示例流程原始碼服務端
- Spring Cloud系列(三):Eureka原始碼解析之服務端SpringCloud原始碼服務端
- http服務原始碼分析HTTP原始碼
- http 服務原始碼分析HTTP原始碼
- [從原始碼學設計]螞蟻金服SOFARegistry之服務上線原始碼
- java WebSocket 服務端程式碼JavaWeb服務端
- 服務端效能測試你應該知道的服務端
- 自媒體運營思路應該從哪些方面看起?
- Netty服務端啟動過程相關原始碼分析Netty服務端原始碼
- 美團Cat原始碼淺析(四)服務端訊息分發原始碼服務端
- 基於原始碼分析apppium服務端啟動過程原始碼APP服務端
- Fabric 1.0原始碼分析(30) Orderer #BroadcastServer(Broadcast服務端)原始碼ASTServer服務端
- 一套優秀的直播APP原始碼,離不開三方服務的加持APP原始碼
- go語言遊戲服務端開發(三)——服務機制Go遊戲服務端
- dubbo服務者原始碼分期原始碼
- Dubbo原始碼之服務引用原始碼
- Laravel原始碼解析 — 服務容器Laravel原始碼
- Dubbo服務暴露原始碼解析②原始碼
- 不一樣的遊戲陪玩原始碼服務端介面設計模式,值得一看遊戲原始碼服務端設計模式
- 遊戲陪玩原始碼的移動端適配,應該如何實現?遊戲原始碼
- Dubbo原始碼解析之客戶端初始化及服務呼叫原始碼客戶端
- React 服務端渲染從入門到精通React服務端
- OpenStack collectd的從零安裝服務端服務端
- MQTT協議從服務端到客戶端詳解MQQT協議服務端客戶端
- dubbo原始碼分析02:服務引用原始碼
- Dubbo原始碼分析十一、服務路由原始碼路由