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

2019-07-22   GameRes遊資網

文/羅培羽

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

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

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

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

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




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

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

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


(圖片來源,《Unity3D網絡遊戲實戰(第2版)》第七章通用服務端框架)



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

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

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

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




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

第四步:技術實現細節

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

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




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

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