天天看點

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

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

開發語言: c++

資料庫:mysql

架構:

多個網關:維持與玩家間的SOCKET連接配接,可處理廣播、斷線重連等邏輯。

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

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

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

可選:

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

日志伺服器:

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

共享記憶體伺服器:将遊戲内實體資料放置在另一個程序内,場景伺服器出現當機時能及時存儲資料,并恢複。

示例如下:

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

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

使用資料庫:内置redis、mysql通路接口,lua的table能友善地轉化為字元串進行存儲

結構: 單程序、多線程

執行結構:             skynet主執行程式,支援庫動态連結庫、服務動态連結庫、LUA腳本檔案或已編譯的lua的腳本檔案

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

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

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

開發語言:c++、python

特點:遠端調用機制rpc使用開發過程中的消息傳遞特别友善。baseserver網關與部分功能合為一個伺服器的設計極大減小了消息在伺服器間的傳輸,友善了玩家自己的邏輯處理。

相似架構: 《暗黑戰神》伺服器使用的是相似的架構,隻是腳本語言選擇的是lua

結構:

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

開發語言:python

使用資料庫:mysql

官方介紹: Firefly是免費、開源、穩定、快速擴充、能 “熱更新”的分布式遊戲伺服器端架構,采用Python編寫,基于Twisted架構開發。它包括了開發架構和資料庫緩存服務等各種遊戲伺服器基礎服務,節省大量遊戲開發的工作時間,真正做到讓使用者把精力放在遊戲玩法邏輯上。用它可以搭建自定義的分布式架構,隻需要修改相應的配置檔案即可。 優勢特性 采用單線程多程序架構,支援自定義的分布式架構; 友善的伺服器擴充機制,可快速擴充伺服器類型和數量; 與用戶端采用TCP長連接配接,無需考慮粘包等問題; 封裝資料緩存服務; 可實作實時熱更新資料以及遊戲邏輯,用戶端玩家無感覺; 有幾十個基礎遊戲玩法系統子產品提供組裝使用(v1.3.0提供);

開發語言: javescript

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

快速、易上手的遊戲開發模型和api

高可伸縮的多程序架構, 支援MMO的場景分區和其它各類分區政策

友善的伺服器擴充機制,可快速擴充伺服器類型和數量

友善的請求、響應、廣播、伺服器通訊機制, 無需任何配置

注重性能,在性能、可伸縮性上做了大量的測試、優化

提供了較多擴充元件,包括遊戲開發常用的庫和工具包

提供了完整的MMO demo代碼(用戶端html5),可以作為很好的開發參考

基于socket.io開發,支援socket.io支援的多種語言用戶端

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

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

開發語言:erlang

資料庫:mysql、mnesia

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

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

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

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