go hive skynet_MMORPG游戏服务器技术选型参考-Go语言中文社区
游戲服務器一般追求穩定和效率,所以偏向于保守,使用的技術手段也是以已經過驗證、開發人員最熟悉、能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語言翻譯了一扁。
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的go hive skynet_MMORPG游戏服务器技术选型参考-Go语言中文社区的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: git怎么上传文件到别人的仓库_Git将
- 下一篇: 科沃斯擦窗机器人擦不干净怎么办_家用自动