1. 程式人生 > >遊戲服務端開發淺談(一)

遊戲服務端開發淺談(一)

去年從傳統軟體公司辭職,下定決心轉網際網路,由於對遊戲的熱愛,去了一家遊戲公司,待了將近10個月,參與開發了一款動作卡牌手遊,遊戲最終也上線了。最近抽空寫寫過去對遊戲後端的一些感想吧。最近又去另外一家遊戲公司,參與開發一款MMO手遊。準備開始從動作卡牌手遊談到MMO手遊,也算是對遊戲開發的一些感悟。

動作卡牌遊戲,相對而言,時延性要求沒有那麼高,所以架構沒有那麼複雜,不過也是值得學習的。本文重點介紹卡牌遊戲的架構。

整個後端架構分成5個主要模組,後面新增2個模組,主要用於跨服對戰。


整個遊戲的架構如上圖所示。

每個區服對應這樣一組程序:

loginserver、dbserver、gameserver、worldserver,gmserver,然後matchserver和pvpserver用於跨服系統。

各個程序間通訊使用socket,通訊協議採用protobuf,對訊息包進行序列化和反序列化。賬號資料以及打點日誌資訊存放在mysql,角色資料存放在redis中。這邊這樣設計的原因是,角色資料要求時延性高,並且是經常寫入,因此採用redis可以提高吞吐量,而賬號資料以及日誌資訊是基本不變動的,而且採用mysql基本滿足需求,並且穩定性比較高,還方便運營後臺維護。這邊可以優化的地方是可以把日誌單獨拎出來,做成一個日誌伺服器。

下面簡單介紹下各個模組功能,後續會繼續分析這樣設計的意義,以及實現的功能。

loginserver:登入伺服器,主要有二種,第一種是中心登入服,所有的客戶端連線這個伺服器獲取伺服器列表資訊,第二種是普通登入服,用於選擇區服之後的登入驗證。

gameserver:邏輯伺服器,管理遊戲的基本邏輯,包括各個基本系統。

worldserver:世界伺服器,管理遊戲的一些資料,包括門派資料,競技場,世界boss等資料。

dbserver:資料庫伺服器,主要管理mysql,包括登入驗證以及日誌打點入庫。

gmserver: GM伺服器,一般只有一個(可做成多節點),主要用於運營後臺的管理,包括郵件的傳送,道具發

送等等功能。

matchserver:一般只有一個(可做成多節點),主要用於跨服系統的匹配,以及監控pvpserver伺服器。

pvpserver:用於管理跨服戰場,和gameserver採用同樣的程式碼,只是初始化不一樣。

這個動作卡牌遊戲的架構基本上是這樣,主要是單服的人數不會太高,所以這樣的架構基本上能滿足實際需求。

這個遊戲單區服最高線上人數一般不會超過5000,所以這樣的設計完全合理。如果是MMO遊戲,架構上將會有很大

的不同。後面將會對一些比較重要的地方如登入流程、網路底層、戰鬥系統、跨服系統等進行重點分析,並且給出

一些優化方案。