網絡游戲服務器開發框架設計介紹


https://cloud.tencent.com/developer/article/1164997

在開發過程中,會先有一份開發大綱或是一份策划案,但是這些在我的開發中可能不會有,或者即使有,也很有可能是我隨性寫下來的,但是我會盡可能寫好它。

網絡通信層,我會放到單獨的SOCKET編程中去講解,這里的主題是游戲的架構設計以及系統模塊間的協同工作。

所以,在這里假設所有的網絡層都已經開發完畢,具體的網絡層開發代碼不會再這里出現,因為這需要很多年的開發經驗,或者對SOCKET有一定的了解才能夠講述清楚或理解,所以我不想再我還沒有足夠的把握之前去說這樣的問題,主要問題是不想讓人說我不專業;另一方面是不希望給沒有接觸過SOCKET編程或了解不多的人帶來誤導或困擾。

在開發游戲具體功能前,第一個要做的就是理清系統功能,這里的系統功能並不是具體的游戲功能,而是從軟件角度出發的,行業內部稱其為分布式服務器開發,講的是如何構建一個可移植、可分布到不同網絡機器獨立或依賴運行的應用程序。

本系列開發教程是我個人游戲經歷和工作歷程的一個沉淀,也是我個人主觀的一個未實現版本,在這里,我希望它可以以教程的方式存在,並去按部就班的一步一步實現出來。所有的源碼代碼都是開源的,我不會有絲毫保留,這樣做的目的是方便很多像我一樣的游戲狂熱者入門無門,另一方面也是希望前輩們可以對我的錯誤進行指正。下面將具體描述服務器的划分以及功能實現。

此系列開發教程,總共將分為10個模塊:它們分別為

  • LoginGate服務器、
  • LoginServer服務器、
  • GameGate服務器、
  • GameServer服務器、
  • IMServer服務器、
  • AIServer服務器、
  • CenterServer服務器、
  • BillingServer服務器、
  • WebServices服務器、
  • DBServer服務器。

1

LoginGate:登陸網關服務器,將所有的LoginServer服務器地址暴露給最終用戶,每個LoginGate服務可以掛接n個LoginServer,將最終用戶的所有請求轉發給目標LoginServer。當最終用戶通過此服務完成登陸后,會與該服務斷開連接,斷開連接前,服務器會將數據上報給GameGate服務。

2

LoginServer:登陸服務器,僅作於內部服務與LoginGate進行連接,所有的最終用戶請求由LoginGate過濾后,轉發過來進行處理。與LoginGate的所有通信都是明文,即未加密數據。

3

GameGate:游戲網關服務器,與LoginGate協作完成最終用戶的登陸過程,每一個服務會連接到唯一一個LoginGate服務上進行注冊,LoginGate會將以完成驗證登陸的用戶信息同步到所有已注冊成功的GameGate上,根據注冊不同的GameGate類型信息,LoginGate會發生不同的通過認證的最終用戶信息。

GameGate掛接n個GameServer服務到自身,此服務將所有注冊到自身的GameServer信息發送給最終用戶,提供用戶選擇具體的區或線路進行游戲(區和線路在不同的游戲設定中有不同的定義),在這里區的定義對應的是GameGate,每一個GameGate可以表示物理或邏輯上的多個游戲分區,每個分區由至少一個GameServer組成;

線路定義為GameServer,每一個GameServer代表一條線路,線路之間互相不可見,但是可以通過IMServer進行一些擴展通信,例如公會、好友、聊天等服務可以設置透明通信或隱藏通信。透明通信由IMServer向目標GameServer轉發請求,並進行處理;隱藏通信僅在當前GameServer進行處理,不會做跨越性操作。

4

GameServer:游戲服務器,作為內部服務與GameGate協作處理最終用戶的請求,這個服務主要處理游戲邏輯,例如戰斗。此服務啟動后,會根據配置文件的配置信息進行相應的服務注冊,該服務啟動成功后,會注冊到GameGate和IMServer、AIServer服務器,它們分別提供最終用戶游戲、交友、公會、聊天和智能體的移動、創建、銷毀等服務。作為整個游戲的核心處理服務器,會處理掉大部分的用戶交互服務請求,只有在不能處理的情況下,才會請求其它服務協同處理。

5

IMServer:IM通信服務器,全稱InstantMessaging(譯為即時通訊),ICQ、MSN、QQ等聊天工具都屬於此范疇。此服務的作用是提供物理或邏輯不同位置的GameServer上的最終用戶通訊的一個媒介,用戶成功登陸GameServer時,會將自己的好友、公會信息注冊到此服務上,當需要跨GameServer服務時,共IMServer使用。此服務主要提供聊天、交友、交易、公會等社交類行為服務,該服務可以直接或間接的與最終用戶進行通信,但最終用戶無法直接與該服務進行通信,比如請求操作,所有的用戶操作都由GameServer轉發,IMServer可以選擇性的直接反饋最終用戶或通過GameServer反饋。

6

AIServer:人工智能服務器,全稱Artificial Intelligence(譯為人工智能),例如現代服務性機器人(自動吸塵器、智能探測儀、智能防爆裝置等)都屬於人工智能范疇。這里的人工智能主要體現在游戲中的NPC、MONSTER等有行為表現物體。GameServer啟動后會連接到此服務進行注冊,並獲取所需智能體的信息,以反饋給最終用戶,並最終顯示在用戶應用程序中。該服務主要控制智能體的移動、攻擊、創建、銷毀等行為,另外包括在戰斗中或非戰斗狀態下的行為,比如游走在街道上的商品小販;在搜索到攻擊目標時,主動或召集附近的戰斗單位一起攻擊用戶,都屬於該服務的工作內容。

7

CenterServer:中心服務器,用於監控、更新已注冊到此服務的狀態,比如電信1區(傲視天地)服務器的運行狀態等。此服務主要是管理除自身以外的所有服務程序的運行狀態,以及時反饋給技術活運維人員。

8

BillingServer:計費服務器,用於計算用戶在游戲中的消耗、增值;比如XX在游戲中購買了一個雙倍經驗卡,消耗10金幣,或者用戶通過網站形式進行充值,都會通過該服務反饋給用戶最終結果。

9

WebServices:網站服務,主要用於網站與游戲之間的交互。比如XX用戶通過網站進行充值服務,充值成功后,通知計費服務以響應用戶操作;或通過網站進行游戲激活、禮品領取等,都需要此服務與游戲應用程序進行交互,以體現實時的變化。

10

DBServer:用於全局數據維護,例如更新、查詢、插入、刪除操作;這些數據包含用戶賬號、充值、代金卷、點卡、月卡以及游戲中需要用到的角色數據。

服務器整體架構圖分布示意圖:

點擊圖片可以放大

LoginGate內部運行示意圖:

點擊圖片可以放大

LoginServer內部運行示意圖:

點擊圖片可以放大

由於其它服務器模塊程序的內部圖與這兩個類似,所以就不在這個上面耽擱太多時間,下一篇將講述具體的游戲開發,網絡庫使用的是開源庫ACE,下載地址http://download.dre.vanderbilt.edu/previous_versions/ACE-5.8.0.zip


免責聲明!

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



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