自己動手從零寫mmo游戲服務器


不知不覺進入游戲行業工作已近一年,在這一年的時間里,除了繁忙的完成策划的邏輯需求,我也一直在思考一個問題:一個支持橫向擴展的mmo游戲服務器,其底層實現到底是怎樣的呢?當然,既然都已經在公司待了近一年時間,對其架構和實現肯定都是有一定了解了,但是沒有具體實現過,永遠都只是紙上談兵,對其思考總不可能深入。更何況造輪子是程序員的樂趣之一,還可以鍛煉自己的技術能力,自由接觸自己想接觸的技術細節,何樂而不為呢?因此,深思良久,今天在此決定開一個《自己動手從零寫mmo游戲服務器》的系列,用來記錄自己從0開發的歷程。

技術選型

服務端使用C++做底層引擎開發語言,暴露接口給Python寫邏輯層腳本,客戶端使用Unity, C#搭建一個小場景,包括主角和一個大的平面,簡單的用於驗證服務端的功能即可。

基礎架構

服務端采用多進程架構,即流行的 多Gate + 多Game + n個單點管理進程(Manager),Gate類似於其他IT領域里的消息隊列MQ,負責與玩家客戶端的連接,將客戶端的消息請求分發到玩家實體對應的Game進程;而Game負責游戲相關的邏輯計算,並將計算結果通過Gate發送到客戶端。可以看到,Gate實際上充當了客戶端與Game進程連接的一個代理Proxy,那為什么客戶端不直接連接到Game呢?這個后續再繼續分析。除了核心的Gate + Game外,還需要有數個單點管理進程,主要用於跨Game間的通信和全服的管理。

技術點

顯然,從零開始寫游戲服務器,需要設計很多技術點,從最基礎的網絡通訊到高層的mmo游戲基礎邏輯(屬性同步,RPC,AOI,位置同步策略...),我們需要一一實現,在此我從底層到高層,將所需的技術點列一個表,今后的開發進度也圍繞這個表進行,逐步完成我們的游戲服務器。(該表可能會隨着自己理解的加深不斷補充變化)

  • 基礎網絡通信功能
    該部分不准備從0寫起,准備基於boost.asio進行開發,主要是因為不想糾結於不同平台的通信api和模型,這種臟活累活既然已經有人幫我們做了,那我們就直接利用起來吧。另外為了快速搭建原型,暫時不去管復雜的網絡狀況,我們假設網絡是像局域網這樣的優良網絡,因此我們直接選用TCP協議進行開發。

  • RPC調用
    RPC是服務器間通信的基本方式,實現RPC涉及到存根stub的自動生成方案,以及通信協議的確定,可以考慮json格式或者protobuf

  • Gate + Game的基礎架構
    在以上基礎上,搭建出Gate + Game的基礎架構,實現客戶端與服務端的通信

  • 基礎游戲邏輯
    包括屬性同步、AOI、位置同步等等,走到這一步,一個mmo游戲服務器的demo就出來了

  • 其他功能
    包括數據庫、尋路、場景划分等等,這些都是后話了

計划

目前計划每周更新一篇,記錄開發進展和技術難點,開發進度視工作繁重程度而定。。。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM