1. 程式人生 > >MMORPG遊戲伺服器技術選型參考

MMORPG遊戲伺服器技術選型參考

    遊戲伺服器一般追求穩定和效率,所以偏向於保守,使用的技術手段也是以已經過驗證、開發人員最熟悉、能HOLD為主要前提。

1、典型按場景分服設計

  開發語言: c++

  資料庫:mysql

  架構:

  多個閘道器:維持與玩家間的SOCKET連線,可處理廣播、斷線重連等邏輯。

  一個或多個賬號登陸驗證伺服器:處理登陸、排隊等邏輯。

  多個場景伺服器:處理在本地圖上能解決的邏輯,如:打怪、玩家間戰鬥、接任務、完成任務等各種不需要跨地圖的邏輯。一個場景服內可放置多張地圖,一般是單執行緒處理邏輯,也有多執行緒(如:《天龍八步》《武俠世界》是一個執行緒處理一個地圖組,一個場景服可以有多個執行緒)。

  一個全域性伺服器:處理不能在一張地圖上處理的邏輯,如跨地圖聊天、跨地圖交易。

  可選:

  一個專門與資料庫打交道的DB代理伺服器

  日誌伺服器:

  跨服邏輯處理伺服器:支援跨服PK

  共享記憶體伺服器:將遊戲內實體資料放置在另一個程序內,場景伺服器出現宕機時能及時儲存資料,並恢復。

示例如下:


2、雲風寫的開源架構《skynet》

       使用開發語言:  C語言、LUA

       使用資料庫:內建redis、mysql訪問介面,lua的table能方便地轉化為字串進行儲存

       結構: 單程序、多執行緒

       執行結構:             skynet主執行程式,支援庫動態連結庫、服務動態連結庫、LUA指令碼檔案或已編譯的lua的指令碼檔案

       特點:ACTOR模式、遊戲邏輯以多個服務存在,服務間以訊息進行通訊(可以是同步,也可以是非同步), LUA服務對每個請求生成一個協程進行處理

       個有感受:skynet主要以lua作為邏輯的實現,C與LUA的結合特別深。如果對LUA本身瞭解程式不夠,不容易上手。進行同步訊息處理時,沒有超時機制。

3、開源伺服器引擎《kbengine》

      《kbengine》在結構上和《bigworld》完全一致,沒有動態負載功能。

       開發語言:c++、python

       資料庫:mysql

       特點:遠端呼叫機制rpc使用開發過程中的訊息傳遞特別方便。baseserver閘道器與部分功能合為一個伺服器的設計極大減小了訊息在伺服器間的傳輸,方便了玩家自己的邏輯處理。

       相似架構: 《暗黑戰神》伺服器使用的是相似的架構,只是指令碼語言選擇的是lua

        結構:

		      |----------|
		      |  client  | x N
		      |----------|

------------------------|-----|-------------------------------

|----------|	     |----------|         |----------|
| loginsrv | x N     |  basesrv | x N     |basesrvmgr| x 1
|----------|         |----------|         |----------|

------------------------|-----|-------------------------------

	|----------|            |----------|
	|  cellsrv | x N	|cellsrvmgr| x 1
	|----------|            |----------|

------------------------|-----|-------------------------------

	|----------|            |----------|
	|  dbmgr   | x 1	|interfaces| x 1
	|----------|            |----------|

------------------------|-----|-------------------------------

		      |----------|
		      |  mysql   | x 1
		      |----------|

服務端元件描述

· loginapp:
登入驗證、註冊、接入口。
可在多臺機器部署多個loginapp程序來負載。 

· dbmgr:
高效能多執行緒的資料存取。
預設使用Mysql作為資料庫。

· baseappmgr:
協調所有baseapp的工作,包括baseapp負載均衡處理等。

· baseapp:
客戶端與服務端的互動只能通過loginapp分配的baseapp來完成。
定時寫entity的資料到資料庫、baseapp資料相互備份、災難恢復。
可在多臺機器部署多個baseapp程序來均衡負載。
指令碼層通常會選擇在baseapp上實現如:社交系統、廣播聊天、排行、遊戲大廳、等等邏輯系統。

· cellappmgr:
負責協調所有cellapp的工作,包括負載均衡處理等。

· cellapp:
處理遊戲與空間和位置有關的邏輯,如:AOI、Navigate、AI、戰鬥等等。
可在多臺機器部署多個cellapp程序來動態均衡負載。 

· client:
客戶端我們將提供基礎框架,這個框架不包括渲染部分和輸入輸出部分的具體實現, 
我們將提供一個lib檔案和一套API介面,開發者可以選擇使用自己比較適合的圖形渲染引擎與輸入輸出控制部分。
Unity3D, HTML5, Cocos2d等技術我們提供了相關外掛,能夠快速的和服務端對接。

· machine:
抽象出一個服務端硬體節點(一臺硬體伺服器只能存在一個這樣的程序)。主要用途是接收遠端指令處理本機上的元件啟動與關閉, 
提供本機上執行元件的接入口以及收集當前機器上的一些資訊, 
如:CPU、記憶體等。 這些資訊會提供給一些對此比較感興趣的元件。 

· interfaces: 
支援快速接入第三方計費、第三方賬號、第三方資料, 快速與運營系統耦合。

· guiconsole: 
這是一個視覺化的圖形介面控制檯工具,可以實時的觀察服務端執行狀態,實時觀測不同Space中Entity的動態,
並支援動態除錯服務端Python邏輯層以及檢視各個元件的日誌,啟動服務端與關閉等。 

· logger: 
收集和備份各個元件的執行日誌。

4、開源架構《firefly》

      《firefly》是九秒社群開發一個開源的框架,程式碼量比較少。

      開發語言:python

      使用資料庫:mysql

官方介紹:     

Firefly是免費、開源、穩定、快速擴充套件、能 “熱更新”的分散式遊戲伺服器端框架,採用Python編寫,基於Twisted框架開發。它包括了開發框架和資料庫快取服務等各種遊戲伺服器基礎服務,節省大量遊戲開發的工作時間,真正做到讓使用者把精力放在遊戲玩法邏輯上。用它可以搭建自定義的分散式架構,只需要修改相應的配置檔案即可。

優勢特性

  • 採用單執行緒多程序架構,支援自定義的分散式架構;

  • 方便的伺服器擴充套件機制,可快速擴充套件伺服器型別和數量;

  • 與客戶端採用TCP長連線,無需考慮粘包等問題;

  • 封裝資料快取服務;

  • 可實現實時熱更新資料以及遊戲邏輯,客戶端玩家無感覺;

  • 有幾十個基礎遊戲玩法系統模組提供組裝使用(v1.3.0提供);

5、開源伺服器構架pomelo

             開發語言: javescript

             Pomelo 是基於 Node.js 的高效能、分散式遊戲伺服器框架。它包括基礎的開發框架和相關的擴充套件元件(庫和工具包),可以幫助你省去遊戲開發枯燥中的重複勞動和底層邏輯的開發。Pomelo 不但適用於遊戲伺服器開發, 也可用於開發高實時 Web 應用,它的分散式架構可以使 Pomelo 比普通的實時 Web 框架擴充套件性更好。

  • 快速、易上手的遊戲開發模型和api
  • 高可伸縮的多程序架構, 支援MMO的場景分割槽和其它各類分割槽策略
  • 方便的伺服器擴充套件機制,可快速擴充套件伺服器型別和數量
  • 方便的請求、響應、廣播、伺服器通訊機制, 無需任何配置
  • 注重效能,在效能、可伸縮性上做了大量的測試、優化
  • 提供了較多擴充套件元件,包括遊戲開發常用的庫和工具包
  • 提供了完整的MMO demo程式碼(客戶端html5),可以作為很好的開發參考
  • 基於socket.io開發,支援socket.io支援的多種語言客戶端

6、頁遊erlang構架

      erlang基於訊息處理的Actor模式,與傳統的C++、JAVA、C#等有著非常大的不同。

      erlang語言開生是為分步式伺服器開發,其中rpc、叢集、熱更新、分步式資料庫天然整合。

      開發語言:erlang

      資料庫:mysql、mnesia

      使用erlang的遊戲:頁遊《畫皮》、頁遊《英雄遠征》、頁遊《遠古封神》。。。。。。

7、基於go語言的架構

       GO天然支援的使用者程序模型,吸收了很多語言的特點。

       使用ERLANG開發遊戲伺服器的一批人使用GO來進行遊戲伺服器的開發。

       在看了一些使用GO語言寫的MMORPG以後,個有感覺是把C++的思路用GO語言翻譯了一扁。