代理服務(wù)器
游戲服務(wù)器開發(fā)過程中砚偶,整個服務(wù)器的架構(gòu)設(shè)計對于項目的影響是至關(guān)重要的,其中包括登錄流程少办,消息機制流程苞慢,消息加密流程 內(nèi)部服務(wù)器消息跳轉(zhuǎn),定時任務(wù)等英妓。 centos 系統(tǒng)為例挽放,給大家梳理下游戲架構(gòu)的基礎(chǔ)設(shè)計思想。
如何設(shè)計
1. 在整體的架構(gòu)中蔓纠,正式上線會在反向代理服務(wù)器前加nginx作為負載均衡辑畦,通過nginx來提高玩家在線人數(shù)
2. 在游戲開發(fā)過程中,不同游戲有不同的架構(gòu)設(shè)計腿倚,例如 H5小游戲或弱聯(lián)網(wǎng)的游戲纯出,可能服務(wù)器單服就搞定;
但是對于注冊量可以達到少則百萬動輒千萬用戶敷燎,游戲架構(gòu)設(shè)計上就要有講究了暂筝,服務(wù)器最好采用集中消息處理、
動態(tài)拓展等硬贯,同時部分服務(wù)焕襟,例如戰(zhàn)斗服等不需暴漏給外網(wǎng)
3. 為了滿足2步驟需求,先不考慮負載均衡饭豹,反向代理服務(wù)器主要可以做到:有效隔離內(nèi)網(wǎng)服務(wù)器鸵赖,消息統(tǒng)一處理
4. 反向代理服務(wù)器功能:消息精準轉(zhuǎn)發(fā)給相應(yīng)的內(nèi)網(wǎng)服務(wù)器
流程分析
1. 反向代理服務(wù)器主要是作為所有消息的入口統(tǒng)一管理,流量上反向代理是最大的相對于內(nèi)網(wǎng)服務(wù)器
2. 可以有效的隔離內(nèi)網(wǎng)服務(wù)器及外網(wǎng)的通信拄衰,安全性上增加
3. 處理消息很簡單它褪,消息的解析、消息轉(zhuǎn)發(fā)到相應(yīng)的內(nèi)網(wǎng)服務(wù)器
實例代碼
// 主函數(shù)
type ProxyServer struct {
Connection *websocket.Conn
StrMD5 string
MapSafe *concurrent.ConcurrentMap
}
var (
cache *cache2go.CacheTable
M *concurrent.ConcurrentMap
)
func main() {
conf.InitConfig()
runtime.GOMAXPROCS(runtime.NumCPU())
http.Handle("/"+conf.GetConfig().Server.URL, websocket.Handler(BuildConnection))
if err := http.ListenAndServe(conf.GetConfig().Server.WSAddr, nil); err != nil {
glog.Info("Entry nil", err.Error())
glog.Flush()
return
}
}
func BuildConnection(ws *websocket.Conn) {
data := ws.Request().URL.Query().Get("data")
if data == "" {
glog.Info("data is Nil")
glog.Flush()
return
}
impl.InitConnection(ws)
}
// 反向代理服務(wù)器的ServerId
const (
SERVER = iota
ProxyServerId // ProxyServerId == 1
GameServerId // GameServerId == 2
BattleServerId // BattleServerId == 3
GMServerId // GMServerId == 4
DBServerId // DBServerId == 5
CenterServerId // CenterServerId == 6
)
// 反向代理服務(wù)器的消息定義
const (
INIYPROXY = iota // ==0
C2Proxy_SendDataProto // C2Proxy_SendDataProto == 1
Proxy2C_SendDataProto // Proxy2C_SendDataProto == 2
G2Proxy_ConnDataProto // G2Proxy_ConnDataProto == 3
Proxy2G_ConnDataProto // Proxy2G_ConnDataProto == 4
G2Proxy_SendDataProto // G2Proxy_SendDataProto == 5
Proxy2G_SendDataProto // Proxy2G_SendDataProto == 6
C2Proxy_ConnDataProto // C2Proxy_ConnDataProto == 7
Proxy2C_ConnDataProto // Proxy2C_ConnDataProto == 8
)
注意事項
- 反向代理服務(wù)器啟動順序
以LollipopGo分布式游戲架構(gòu)為例:
1. 反向代理服務(wù)器需要在其他服務(wù)器啟動前啟動翘悉,原因是反向代理相當(dāng)于內(nèi)網(wǎng)服務(wù)器是服務(wù)器茫打,而內(nèi)網(wǎng)服務(wù)器角色是
“客戶端”,所以需要先啟動后內(nèi)網(wǎng)服務(wù)器主動連接反向代理服務(wù)器
2. 游戲反向代理服務(wù)器是每組服務(wù)器的消息總?cè)肟谘欤苑聪虼矸?wù)器的邏輯功能盡量簡單
3. 反向代理服務(wù)器功能:客戶端注冊包吝,內(nèi)網(wǎng)服務(wù)器注冊,消息轉(zhuǎn)發(fā)到對應(yīng)服務(wù)器源葫,消息轉(zhuǎn)發(fā)到指定玩家