拿到一套遊戲服務端原始碼,該從哪看起?

遊資網發表於2019-07-22
開發遊戲服務端,經常要接觸一套全新的遊戲程式碼。接觸新程式碼貫穿於整個工作生涯,比如,作為剛入職的新人,要去熟悉專案程式碼,儘快上手工作;調到一個新的專案組工作時,要熟悉已有程式碼;給專案組做技術指導時,也需要了解原有的寫法。

然而看懂一套自己並不熟悉的程式碼並不容易。其一是時間有限,工作中往往要求能夠快速上手;其二是新程式碼往往包含自己一些知識盲區,需要學習。於是編寫此文,總結一套看程式碼的方法和流程,以供參考。

第一步:看角色邏輯的編寫方式

遊戲服務端的最核心功能就是處理玩家邏輯,可以先從單服的邏輯看起。比如看看揹包模組、簽到模組的編寫方式,從而理解遊戲的邏輯組織。

一般而言,玩家邏輯會涉及如下圖的幾個部分,看程式碼時可以按照模組生命週期的流程跟著。當玩家上線時,需要載入資料;然後處理客戶端協議;下線前需要儲存資料。按照這個順序,看看每個步驟的寫法。

拿到一套遊戲服務端原始碼,該從哪看起?

看過幾個模組後,便可以仿寫一些簡單的功能邏輯。對遊戲公司,這也是培養新人時,前期的要求。

第二步:看玩家上線到下線的整個流程

玩家從連線服務端,到他退出遊戲,中間一般會經歷如下圖的流程。

拿到一套遊戲服務端原始碼,該從哪看起?
(圖片來源,《Unity3D網路遊戲實戰(第2版)》第七章通用服務端框架)

跟完這個流程,基本可以明白整個服務端的邏輯架構。比如有些遊戲服務端在gateway中處理連線,然後交由login服處理登入,再交給game服處理遊戲邏輯,可能還會有db服處理資料庫的讀取。那麼,一步步的跟進這個流程,就能夠把服務端各個部分的職能給聯絡起來,也能夠解決一些遊戲流程的問題。

第三步:看戰鬥邏輯的實現

遊戲中的一些核心功能,比如地圖、戰鬥往往較為複雜,還可能涉及跨服。看這部分程式碼的目的是從之前只能開發一些簡單的通用功能,擴充套件到能夠開發核心功能。

舉例來說,比如某款遊戲的戰鬥流程可能如下圖。當玩家進入匹配時,遊戲服會把玩家的一些資訊發到匹配服去做匹配;當匹配成功,服務端會建立一個戰鬥服,然後參與戰鬥的各個玩家切到戰鬥服去戰鬥。

拿到一套遊戲服務端原始碼,該從哪看起?

那麼要關注的地方就有各個服務的職能是什麼,它們間的資料傳輸流程,以及傳輸了哪些資料。進而還需要了解角色在戰鬥服中的邏輯,比如戰鬥開始、戰鬥結束的處理,放技能傷害的計算。

第四步:技術實現細節

遊戲服務端涉及的內容其實很多,在按照以上三個步驟看程式碼後,基本就能夠在這套程式碼的基礎上做開發。但如果要修改一些底層功能,或者做效能優化,就要更加深入的看程式碼。

一般而言,以下的三個模組是重點,可以優先了解。

拿到一套遊戲服務端原始碼,該從哪看起?

網路作為服務端的重點模組,可以瞭解該框架採用什麼方式處理多路連線,瞭解協議的設計。磁碟IO可能會是服務端的效能瓶頸,一般會通過快取機制來緩解,要了解服務端的儲存結構,知道儲存著什麼資料以及怎樣儲存。手遊很注重熱更新功能,作為保持伺服器穩定的一個重要手段,但做好熱更新並不容易,可以瞭解框架的熱更方案。

經由以上幾步,應能夠了解一套服務端程式碼,能在它的基礎上編寫邏輯,改動底層功能。

作者:羅培羽

相關文章