學習遊戲伺服器程式設計提高篇

2021-07-26 09:02:38 字數 2046 閱讀 9593

筆者介紹:

姜雪偉,

it公司技術合夥人,

it高階講師,

csdn

社群專家,特邀編輯,暢銷書作者,國家專利發明人

;已出版書籍:《手把手教你

架構

3d遊戲引擎》電子工業出版社

和《unity3d

實戰核心技術詳解》電子工業出版社等。

在上篇學習遊戲伺服器基礎篇中給讀者介紹了如何學習遊戲伺服器,主要針對的是想學習遊戲伺服器程式設計的開發者。學習伺服器程式設計,也是乙個循序漸進的過程,學習知識還是要用於實踐開發的,實踐開發的最好方式就是去公司參與專案開發,這樣才能真正的鍛鍊自己的技能。本章介紹一下在知名it公司中通常使用的遊戲伺服器架構設計,以及它們的編寫處理方式。

一款成熟的遊戲伺服器,它的技術是建立在成熟產品上的,也就是說經歷過上線產品驗證的伺服器都是可以學習的。伺服器的設計其實比較複雜,本篇文章主要是介紹兩種伺服器,這兩種伺服器都是經過成功產品驗證過的,一種是不帶有負載均衡的,另一種是帶有負載均衡的伺服器,這裡給讀者一一介紹。

第一種伺服器是不帶有負載均衡的,先介紹一下伺服器的基本結構,直接看圖如下所示:

這種架構的伺服器在很多it公司使用,它是針對的mmorpg或者mmorapg大型遊戲設計的,帶有場景伺服器的,這裡的場景伺服器,可以繼續分解出fight伺服器以及其他伺服器。先介紹各個功能伺服器:

centerserver 伺服器管理器,管理所有的伺服器,分配伺服器的埠, 負責全域性的邏輯

dbserver 角色檔案cache伺服器

gameserver 邏輯伺服器

gateserver 閘道器伺服器,負責訊息**

loginserver 登入伺服器, 連線賬號資料庫,檢測使用者名稱和密碼

再介紹伺服器的基本流程:使用者從客戶端選擇遊戲伺服器列表,登入到loginserver,在這個過程中先去平台伺服器進行帳號的驗證是否正確,通過後會通知loginserver,然後loginserver把驗證正確的資訊傳送訊息到centerserver, 請求其中的gateserver的位址和埠,centerserver找乙個可用的gateserver的資訊, 傳送回loginserver。loginserver再把訊息傳送給客戶端,然後客戶端斷開與loginserver的鏈結,然後在與gameserver伺服器鏈結進入到遊戲場景中。

在這裡注意的是gateserver與gameserver是一對一的關係,換句話說,每個gameserver能容納的玩家數量是一定的,一旦達到gameserver的最高峰值,它就會找下乙個gateserver對應的gameserver,各個gateserver伺服器之間是不通訊的。當然玩家的實時同步是在gameserver伺服器中實現的,實時同步在伺服器中的處理也是遊戲伺服器中的核心技術點,後面會結合著**講解。接下來介紹具有負載均衡伺服器,先看圖如下所示:

網路訊息傳輸建議使用google開源的庫protobuf-net,使用文字檔案定義的訊息結構體,可以通過它自帶的工具轉化成c#和c++,然後將生成的檔案放到工程中直接呼叫所定義的結構體即可。

最後,如果讀者感興趣可以學習開源框架node.js,這個對於初學者門檻比較低,它也可以處理負載均衡問題,網上參考資料非常多。後面會介紹各個伺服器的**編寫以及核心模組的介紹實現。

敬請期待。。。。。。。。

遊戲伺服器程式設計

參考書籍 linux 多執行緒伺服器端程式設計 網路遊戲伺服器程式設計 unix網路程式設計 鳥哥的linux私房菜 unix環境高階程式設計 developing online games cnv1 cnv2 ice我參與專案已經用了ice,比ace corba這樣的中介軟體簡單。1 linux系...

遊戲伺服器開發 準備篇 初識遊戲伺服器開發

近期轉換了工作方向,從web開發走向了遊戲開發。此前的工作中,主要負責web分布式專案的開發,rest服務開發,幷包含一部分im系統的開發。分布式系統框架,資料庫,nosql接觸的比較多,比較雜。而新工作比較單一,主要負責遊戲伺服器的業務開發。使用的也是前輩封裝好的框架。後來發現,原來全公司都使用了...

《網路遊戲伺服器程式設計》

fd clr s,set removes the descriptor s from set.fd isset s,set nonzero if s is a member of theset.otherwise,zero.fd set s,set adds descriptor s to set....