標籤:

有那些比較成熟的開源遊戲伺服器引擎/框架(編程語言不限)?


更新,沒有看到伺服器(逃。

下面僅為遊戲引擎和框架推薦,需要的小夥伴簡單看一下,正確的答案努力撰寫中。


從角色扮演遊戲到即時策略遊戲,從冒險解謎遊戲到動作射擊遊戲,甚至是只有一兆大小的迷你遊戲,都有起著核心作用的技術組成部分。下面給題主推薦十款好用的開源遊戲引擎和框架,希望能給你的遊戲開發帶來幫助,也供大家一起交流學習。

1. 項目名稱:分散式遊戲服務端引擎 KBEngine

項目簡介:KBEngine 是一款開源 mmog 服務端引擎, 使用統一協議能夠輕鬆與前端對接,能輕鬆使用 unity3d、 ogre、 cocos2d、 html5 等作為前端表現。

底層框架由 C++編寫, 邏輯層使用 Python(支持熱更新), 開發者無需重複實現一些通用的底層服務端技術, 使開發者能夠真正集中精力到遊戲開發上來, 快速打造各種遊戲。

項目地址:likecg/kbengine - 碼雲 Gitee.com

2. 項目名稱:開源跨平台遊戲開發框架 Cocos2d-x

項目簡介:Cocos2D-X 是全球知名的開源跨平台遊戲引擎,易學易用,目前已經支持 iOS、Android、Windows 桌面、Mac OS X、Linux、BlackBerry、Windows Phone 等平台。Cocos2d-JS 統一了使用 JS 進行開發的開發體驗,將 HTML5 引擎與 JSB 的 API 高度統一起來。

項目地址:碼雲極速下載/cocos2d-x - 碼雲 Gitee.com

3. 項目名稱:2D 和 3D遊戲引擎 Godot

項目簡介:Godot 是一個全新開發的遊戲引擎,其功能集類似知名的跨平台遊戲引擎 Unity,可用於開發 PC、主機、移動和Web遊戲。開發者聲稱引 擎的2D和動畫支持要強於 Unity,表示在功能和特性上沒有其它開源遊戲引擎能相媲美。

Godot 引擎內置了類似Unity的編輯器,GUI 工具包,2D/3D 物理支持,支持 OpenGL ES 2.0 功能集的 3D渲染器,易於學習的語言和 API,支持用 ASM.js 或 Google Native Client 輸出 HTML5 代碼,支持 Linux、Windows 和 OSX 開發平台。

項目地址:碼雲極速下載/godot - 碼雲 Gitee.com

4. 項目名稱:網易遊戲伺服器框架 Pomelo

項目簡介:Pomelo 是由網易開發的基於 Node.js 開發的高性能、分散式遊戲伺服器框架, 也可作為高實時 Web 應用框架。

Pomelo 包括三部分:

  • 框架,Pomelo 的核心, 與以往單進程的遊戲框架不同, 它是高性能、分散式的遊戲伺服器框架,並且使用很簡單
  • 庫,包括了開發遊戲的常用工具庫, 如人工智慧(AI)尋路, AOI 等
  • 工具包,包括管理控制台,命令行工具,壓力測試工具等

項目地址:Pomelo首頁、文檔和下載 - 網易遊戲伺服器開發框架 - 開源中國社區

5. 項目名稱:C++ 紙牌遊戲引擎 Wagic

項目簡介:Wagic 是一個自製的 C++ 紙牌遊戲引擎,支持的平台包括:Android (手機和平板), the Sony PSP, Windows, Linux, Maemo, Meego, iOS (iPhone/iPad) and MacOS. 該遊戲引擎可高度定製,並允許修改規則創建自己的撲克和主題。

項目地址:Wagic首頁、文檔和下載 - C++ 紙牌遊戲引擎 - 開源中國社區

6. 項目名稱:HTML5 開源免費遊戲框架 Egre

項目簡介:Egret Framework 是一款使用 JavaScript(TypeScript) 編寫的 HTML5 開源免費遊戲框架。Egret Framework 的核心定位是開放,高效,優雅。基於它,你可以快速輕鬆地構建屬於自己的 HTML5 移動遊戲。

項目地址:Egret首頁、文檔和下載 - HTML5 遊戲開發框架 - 開源中國社區

7. 項目簡介:HTML5 互動遊戲引擎 Hilo

項目簡介:Hilo 是阿里巴巴集團開發的一款 HTML5 跨終端遊戲解決方案,它可以幫助開發者快速創建 HTML5 遊戲。

項目地址:Hilo首頁、文檔和下載 - HTML5 互動遊戲引擎 - 開源中國社區

8. 項目名稱:Android 遊戲引擎 Libgdx

項目簡介:Libgdx 是一個跨平台的開發框架。它目前支持的平台有 Windows,Mac OS X,Android,IOS 和 HTML5。

Libgdx 允許你可以將代碼不經任何修改的部署到多個平台。而不是修改你的代碼適應不同的平台或者直接編譯到 HTML5。你可以在一個桌面開發環境中迅速部署你的代碼。你可以使用所有的 Java 生態系統中的開發工具。

項目地址:libgdx首頁、文檔和下載 - Android遊戲引擎 - 開源中國社區

9. 項目名稱:HTML5 開源遊戲引擎 LayaAir

項目簡介:LayaAir 提供 Canvas 和 Webgl 同時渲染,如果 Webgl 不可用,則可自動切換到 Canvas 模式。引擎為高性能遊戲設計,支持 AS,TS,JS三種語言開發,一套代碼三端齊發(Flash,HTML5,APP)。

項目地址:LayaAir首頁、文檔和下載 - HTML5 開源遊戲引擎 - 開源中國社區

10. 項目名稱:HTML5 2D 遊戲開發框架 Phaser

項目簡介:Phaser 是一個開源的桌面和移動 HTML5 2D 遊戲開發框架,支持 JavaScript 和 TypeScript。

項目地址:碼雲極速下載/phaser - 碼雲 Gitee.com

碼雲 http://Gitee.com

發現更多優質開源項目:最新推薦 - 碼雲 - 開源中國

團隊流暢、高效開發:碼雲企業版 - 碼雲 - 開源中國


廣告下 https://github.com/davyxu/cellnet

自己寫的,自己項目在用,算商業化吧


這個問題我看過一直沒回答……原因是不好正面回答。樓主的問題會引出很多話題。我理理思路啊

1、如果只是想找一個「成熟」的開源遊戲伺服器,先用起來再說的話

遊戲伺服器框架十年前就有大公司在做,也有很多開源的,到現在能得到廣泛應用的一個都沒有。這個問題下面細談。如果現在立刻要用一個框架,我強烈建議pomelo,因為可選的框架中只有pomelo構造不是太複雜,而且提供很多常用的伺服器功能。但是蛋疼的是只能用JavaScript寫,作為傳統流派(JavaScript很少用,半吊子 )我很難接受……

2、很多框架都自稱「通用遊戲伺服器框架」,實際要麼做的太多,要麼做的太少

一個伺服器框架,能同時很好地滿足手游卡牌伺服器,和MMO伺服器么?非常懸。因為如果框架做的事情太多了,根據某種需求定製了很多功能,就失去了靈活性,你後期修改會非常麻煩。有個極端的例子是我參與過用BigWorld框架做MOBA遊戲的項目,後期程序改的想死,策劃更是生無可戀。真是個悲傷的故事。

如果框架做的非常少、只提供基本功能,根據需求定製就比較靠譜了,但是這意味著你就不能偷懶了,登錄、分服、充值、保存數據,該寫的你都得自己寫,就算用別人的你也得看明白了,別等數據丟了你就笑不出來了。

3、做一個手游伺服器超簡單的……

個人在技術方面是極簡派的,我自己做的第一個伺服器是純Python寫的,最關鍵的進程管理和進程間通信部分用了Python內置的Multiprocessing庫,整個伺服器非邏輯的部分也就不到1000行Python代碼的樣子,簡單至極,隨便找來的實習生看著看著就看明白了……回想自己以前搞的C++端游伺服器,讀了幾年才理解了七七八八。(這個框架性能不是很高但夠用。遊戲不火,我只能說單服承載幾百人沒任何問題)

現代伺服器框架至少解決以下幾個問題:

  1. 和客戶端通信
  2. 進程管理(或者多服務管理)和伺服器內部通信。畢竟是多核時代了,沒有多進程或者多服務,伺服器性能上不去。
  3. 架構合理,可以方便搭建邏輯框架,實現具體需求。
  4. 其他必要的部分。

在最重要的第二點上,Skynet是這個領域的佼佼者,就算不用Skynet你也要學學。

4、遊戲伺服器框架太多了,都在各自的小圈子裡用

遊戲伺服器框架,有點像「龍的傳人」,一代傳一代,師傅傳徒弟,徒弟用熟練了就不想換了,接著在上面改。至今先祖「目標軟體」的C++伺服器框架依然在發揮光和熱 。

也有知名公司做了Python的伺服器,據說很好用很強大,但是並不開源。

現在最流行的還屬go語言,而且用的人大都自己封裝一套,並沒有統一的。而且大多數也僅僅是夠用而已,底層設計……說實話很多goroutine的用法都不倫不類。所以我一直推崇學習skynet……

說了這麼多廢話,樓主如果真是需要使用框架,建議從skynet開始做起,水平足夠的話進展比你想像要快。另外就是找pomelo或者類似的功能較為齊全的框架,不過對「成熟」框架不用報太大希望,伺服器框架還真沒什麼統一標準,不像客戶端引擎相對統一。


心疼skynet,大幾千的star,數個十萬級在線用戶的商業級引擎就這樣一句「skynet沒法用」懟了。

KB沒用過不評價。

pomelo見過成功上線賺錢的產品都是單機多進程,pomelo跨機rpc夠喝一壺、線上項目被坑過。另外node版本管理也足夠酸爽,好處是node生態非常好,npm很方便。做遊戲邏輯的同時,順帶還能給gm工具之類的都做了。因為js本身的坑,pomelo的code需要用ES6重寫。

skynet不能拿來和上面倆在一個層面比較,skynet不是out of box的,需要根據你的業務做對應的二次開發,並且要對C和Lua以及Erlang的Actor模型有足夠的了解才能維護。好在skynet社區足夠活躍,例子也足夠多,問問題基本當天都能得到回復。實際開發還要搭配其他框架,不過好在skynet設計的足夠好,都很容易做到擴展。


kbengine/kbengine

http://kbengine.org

算是比較強大的真正的c++引擎了,邏輯只需要寫腳本,底層編譯後不需要改動,是一種通用的伺服器, 開發十年了,較多項目使用

什麼是KBEngine?

一款開源的遊戲服務端引擎,客戶端通過簡單的約定協議就能與服務端通訊, 使用KBEngine插件能夠快速與(Unity3D、UE4、OGRE、HTML5、等等)技術結合形成一個完整的客戶端。

服務端引擎層使用C++編寫,遊戲邏輯層使用Python(支持熱更新),開發者無需重複的實現一些遊戲服務端通用的底層技術, 將精力真正集中到遊戲開發層面上來,快速的打造各種網路遊戲。

(經常被問到承載上限,KBEngine底層架構被設計為多進程分散式動態負載均衡方案, 理論上只需要不斷擴展硬體就能夠不斷增加承載上限,單台機器的承載上限取決於遊戲邏輯本身的複雜度。)


自己開發鍛煉技術隨便選各種開源引擎,如KBEngine.

如果是做項目想上線,就選商業引擎。

比如Photon光子引擎,一般個人開發使用和小遊戲完全免費,加上範例多,MMO和FPS都有,開發非常省力省時間。

沒事幹別選重新發明輪子的事情。


我個人開發遊戲伺服器,喜歡用C++做數據結構和介面,腳本做邏輯處理,腳本如果不存數據,那麼就基本做到無狀態邏輯,相反如果腳本緩存太多數據達到一定量的時候,腳本可能會出問題,而且腳本的多重引用引起的內存泄露比c++更不好查,還有高頻率調用的介面直接c++搞定,這樣普通結構腳本直接搞起,出了bug還可以熱更新,上線成功應用的我用過c++python 還有c++lua,這個怎麼選擇就看個人喜好了。處於對以前的經驗總結我開源了一個項目,h2engine,有興趣的可以了解下,這裡只說幾個創新或者說特別之處吧:

  1. 單gate,好的gate一個就夠,單gate的設計還有一個易理解的好處,對於新入門的或者不太擅長弄架構的同事,你就跟他說這個就相當於Apache,它一下就理解了,另外單gate的好處是,他可以作為邏輯進程的協調者,另外配置也非常的簡單,邏輯進程相當於Apache的php進程。gate支持二進位的socket通信和websocket,平常用連二次開發都免了。
  2. 邏輯進程稱之為worker進程,採用偽分散式,即單線程多進程方式跑在一個機器上,運營過遊戲的都知道,多核時代,大部分遊戲單服的各個進程都是跑在一個機器上,這樣設計的好處是worker進程可以使用共享內存,這樣全局類的數據比如行會數據、排行榜數據直接可以同步而不用採用非同步的方式,如果你的遊戲上線過幾年,你就知道多進程情況下全局數據比如行會、排行榜等都是最難維護的,非同步模式下要保持數據一致性煩躁的很。用偽分散式方式,分分鐘解決全局數據共享,性能也是桿杠的。
  3. c++封裝介面給腳本用,由於我自身對各個腳本都有應用經驗,嵌入腳本這塊不是吹還真是有兩把刷子,fflua,ffpython都是我開發的開源嵌入lua和python的類庫。這次一時興起,把Python,lua,js,php都支持了。
  4. 非侵入式設計,做過多年遊戲的老司機們不知道你們想過沒有,每做一個新遊戲時候,都是把老框架拿過來用,但是總是要一頓刪,然後再一頓include新項目的文件,是不是很像有個很成熟的底層框架,只拿來用但是不改就可以和現有項目集成?這個就屬於非嵌入式設計,h2engine主要封裝了底層通信,當你想把你項目模塊加入到h2engine中比如在main中初始化你的模塊,不需要再main.cpp中include你的文件,只需要你再cpp主使用worker_at_setup(function)就可以了,完全解耦。另外一個比較重要的非侵入式設計是使用了事件機制,這樣保留了不修改現有代碼而擴展和控制已有功能的能力。
  5. 資料庫io線程池,非同步回調方式,增加了連接池分組,為啥分組?大部分時候我們都是connections[userid % connections_size]-&>query 不是嗎?
  6. 個人覺得h2engine不但可以用於遊戲伺服器,一般的app後台也非常適合。

相關連接

  1. 文檔 http://h2cloud.org
  2. 源碼 https://github.com/fanchy/h2engine


相對於KBE和pomelo來說,skynet確實沒法用。

KBE完全可以python直接寫邏輯,pomelo直接js語言。skynet還是要看C代碼的,這對中小企業來說成本太高了。


不都是一家一套嗎?不對,一個工作室一套,不對,一個項目一套,比如:盛大


用開源全部都是坑你還沒能力填坑,你就知道多痛苦了,KB那套不太建議用,商用太少坑太多,skynet有百萬級項目支持能力夠可以考慮,至於scut建議放棄,.net還不支持core你敢用運營也不敢啊,上線三天一小掛兩天一大掛,玩呢?可以考慮go語言去寫,簡單效率高,代碼風格同一,喜歡c的建議用skynet


我們公司用的就是skynet,已經做了好幾個項目了


為什麼skynet沒法用


現在node.js好像挺火的,不過不管是任何開源的引擎,你終歸是要從頭到尾熟悉一遍的,不然出了問題,你都不知道怎麼找


可以看看go的微服務遊戲伺服器骨架

http://github.com/gonet2


starrydb新出的遊戲伺服器引擎,使用lua開發,簡單易用。

starrydb-publice


樓主只會js?


netty,java高性能非同步式事件驅動框架


Netty?個人剛剛涉及這方面,並不是很了解。


網易伺服器框架Pomelo, 使用了三年,開發了多款遊戲。


韓國的ProudNet非常完整的遊戲伺服器引擎。

http://proudnet.com/zh-hans/


伺服器要看項目具體需要,所謂引擎也就是一些公共組建吧,比如net,db這些是遊戲伺服器不可缺少的,至於伺服器的架構,單個gate還是多個gate,one game server or multi game servers,有沒有世界服都要看遊戲類型和要求吧。


為什麼skynet沒法用?請樓主給出理由,樓主對skynet的了解有多少?樓主用什麼服務端框架做過哪些項目,請結合你的經驗加以說明。


推薦閱讀:

TAG:CocosCreator |