本身動手從零寫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間的通訊和全服的管理。json

技術點

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

  • 基礎網絡通訊功能
    該部分不許備從0寫起,準備基於boost.asio進行開發,主要是由於不想糾結於不一樣平臺的通訊api和模型,這種髒活累活既然已經有人幫咱們作了,那咱們就直接利用起來吧。另外爲了快速搭建原型,暫時不去管複雜的網絡情況,咱們假設網絡是像局域網這樣的優良網絡,所以咱們直接選用TCP協議進行開發。服務器

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

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

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

  • 其餘功能
    包括數據庫、尋路、場景劃分等等,這些都是後話了代理

計劃

目前計劃每週更新一篇,記錄開發進展和技術難點,開發進度視工做繁重程度而定。。。接口

相關文章
相關標籤/搜索