游戲服務器框架:gonet
A game server skeleton implemented with golang.
部署:
-
Game Server(GS):
玩家直接連接GS, 處理玩家邏輯,并與 HUB/SS 通信,GS存在若干個。 -
Hub Server(HUB):
若干個GS 連接到一個HUB, 只存在一個HUB,維護基礎的全局信息,以及 GS<--->GS 的消息轉發. -
Stats Server(SS):
統計服務器,根據玩家的行為,記錄策劃需要的數據,以便于后期統計。
統計屬于事后分析,數據量較大,性能需求不同, 故單獨列為一個服務器。
通信原則:
-
GS到HUB/SS的通信,都是Call同步調用,即GS必須等待ACK。
-
HUB到GS的通信,只有forward數據包。
-
單播消息在玩家離線時會存入db, 登錄后的啟動過程 GS 直接讀取db,并forward給玩家goroutine。(持久化)
-
多播消息會發送給所有的在線玩家(非持久化)
-
廣播消息會發送給所有的在線玩家(非持久化)
服務器狀態一致性
-
GS節點可以單獨重啟
-
HUB 重啟后,GS必須全部重啟
-
SS 可隨意重啟,不影響業務
安裝先決條件:
-
確保安裝好bzr, graphviz, gawk
-
確保安裝好mongodb
-
確保config.ini中的mongo_xxxx配置正確
-
export GOPATH='當前目錄'
安裝:
-
xtaci@ubuntu:~$ git clone https://github.com/xtaci/gonet
-
xtaci@ubuntu:~$ cd gonet
-
xtaci@ubuntu:~/gonet$ export GOPATH=~/gonet
-
xtaci@ubuntu:~/gonet$ go get labix.org/v2/mgo
-
xtaci@ubuntu:~/gonet$ make
-
xtaci@ubuntu:~/gonet$ ./start-test.sh