xingo golang游戲開發(fā)交流群:535378240
xingo_cluster是免費(fèi)、開源、可定制、可擴(kuò)展、節(jié)點(diǎn)支持“熱更新”的高性能分布式游戲服務(wù)器開發(fā)框架,采用golang語言開發(fā),天生攜帶高并發(fā)場景的處理基因,繼承了golang語言本身的各種優(yōu)點(diǎn),開發(fā)簡單易上手并且功能強(qiáng)大。它主要實(shí)現(xiàn)了基于Actor模式的網(wǎng)絡(luò)庫xingo,分布式節(jié)點(diǎn)間的高性能rpc通信,日志管理等,可以節(jié)省大量游戲開發(fā)時(shí)間,讓游戲開發(fā)人員可以將主要精力放到游戲玩法和游戲邏輯上。真正實(shí)現(xiàn)了修改配置文件就可以搭建自定義的分布式游戲服務(wù)器架構(gòu)。
優(yōu)勢特點(diǎn):
1) 開發(fā)效率高
2) 支持自定義的分布式架構(gòu),方便橫向擴(kuò)展節(jié)點(diǎn),理論上只要有足夠的物理機(jī)器,沒有承載上限
3) Actor模式降低游戲開發(fā)的心智負(fù)擔(dān)
4) 支持自定義通信協(xié)議
5) 分布式節(jié)點(diǎn)自動(dòng)發(fā)現(xiàn)
6) worker pool工作線程池
示例配置:
{ "master":{"host": "192.168.2.225","rootport":9999}, "servers":{ "gate2":{"host": "192.168.2.225", "rootport":10000,"name":"gate2", "module": "gate", "log": "gate2.log"}, "gate1":{"host": "192.168.2.225", "rootport":10001,"name":"gate1", "module": "gate", "log": "gate1.log"}, "net1":{"host": "192.168.2.225", "netport":11009,"name":"net1","remotes":["gate2", "gate1"], "module": "net", "log": "net.log"}, "net2":{"host": "192.168.2.225", "netport":11010,"name":"net2","remotes":["gate2", "gate1"], "module": "net", "log": "net.log"}, "net3":{"host": "192.168.2.225", "netport":11011,"name":"net3","remotes":["gate2", "gate1"], "module": "net", "log": "net.log"}, "net4":{"host": "192.168.2.225", "netport":11012,"name":"net4","remotes":["gate2", "gate1"], "module": "net", "log": "net.log"}, "admin":{"host": "192.168.2.225", "remotes":["gate2", "gate1"], "name":"admin", "module": "admin", "http": [8888, "/static"]}, "game1":{"host": "192.168.2.225", "remotes":["gate2", "gate1"], "name":"game1", "module": "game"} } }
架構(gòu)圖:
默認(rèn)通信協(xié)議如下(支持自定義協(xié)議處理部分代碼,支持靈活的重載協(xié)議部分代碼):
Len uint32 數(shù)據(jù)Data部分長度
MsgId uint32 消息號
Data []byte 數(shù)據(jù)
消息默認(rèn)通過google 的protobuf進(jìn)行序列化
服務(wù)器全局配置對象為GlobalObject,支持的配置選項(xiàng)及默認(rèn)值如下:
TcpPort: 8109,//服務(wù)器監(jiān)聽端口
MaxConn: 12000,//支持最大鏈接數(shù)
LogPath: "./log",//日志文件路徑
LogName: "server.log",//日志文件名
MaxLogNum: 10,//最大日志數(shù)
MaxFileSize: 100,//per日志文件大小
LogFileUnit: logger.KB,//日志文件大小對應(yīng)單位
LogLevel: logger.ERROR,//日志級別
SetToConsole: true,//是否輸出到console
LogFileType: 1,//日志切割方式1 按天切割 2按文件大小切割 PoolSize: 10,//api接口工作線程數(shù)量
IsUsePool: true,//是否使用worker pool false 每個(gè)請求開啟單獨(dú)的協(xié)程處理
MaxWorkerLen: 1024 * 2,//任務(wù)緩沖池大小
MaxSendChanLen: 1024,//發(fā)送隊(duì)列從緩沖池
FrameSpeed: 30,//未使用
OnConnectioned: func(fconn iface.Iconnection) {},//鏈接建立事件回調(diào)
OnClosed: func(fconn iface.Iconnection) {},//鏈接斷開事件回調(diào)
如何使用?
只需要一步,添加消息路由:
s := fserver.NewServer()
//add api ---------------start
FightingRouterObj := &api.FightingRouter{}
s.AddRouter(FightingRouterObj)
//add api ---------------end
xingo會自動(dòng)注冊FightingRouter中的方法處理對應(yīng)消息
例如:msgId =1 則會尋找FightingRouter中的Func_1的方法從進(jìn)行處理
具體使用請參考項(xiàng)目(也是xingo的demo(幀同步服務(wù)器)):
https://github.com/viphxin/fighting
更多建議: