關(guān)于要游戲類項(xiàng)目結(jié)構(gòu) 我是這樣想的
通過GatewayWorker做網(wǎng)關(guān)
通過workerman做游戲服和其他公用服(如登錄或其他數(shù)據(jù)服等)
通過在網(wǎng)關(guān)中注冊消息事件,根據(jù)消息事件來分發(fā)消息到各個worker服
有幾個問題請教
萬分感謝,想做游戲服,在考慮整個項(xiàng)目的結(jié)構(gòu)問題, 望給予一些建議指導(dǎo)
多謝
GatewayWorker提供的接口大部分是廣播類接口,例如sendToUid()是向所有g(shù)ateway進(jìn)程發(fā)起請求,客戶端一個請求可能會裂變成gateway進(jìn)程的多個請求調(diào)用,每秒1000個請求到服務(wù)端可能會裂變成上萬個gateway進(jìn)程調(diào)用,這種每秒幾千次大量內(nèi)部接口調(diào)用特別頻繁時會消耗很大的資源。所以GatewayWorker這種架構(gòu)適合做維持大量連接,但是內(nèi)部接口調(diào)用不是特別頻繁的應(yīng)用,例如聊天、物聯(lián)網(wǎng)、棋牌類游戲。
即時戰(zhàn)斗類的通訊特別頻繁的適合直接workerman來做。
關(guān)于數(shù)據(jù)共享,主要看進(jìn)程對共享數(shù)據(jù)操作有多頻繁,比如每秒上萬次讀寫,多進(jìn)程的性能反而大大降低,這種情況單進(jìn)程性能更好,例如這個帖子 http://wtbis.cn/q/523 。如果通訊不頻發(fā)建議redis。
不清楚你們做的是什么游戲。GatewayWorker + workerman的架構(gòu)感覺有些復(fù)雜。
棋牌游戲的話 想走一個網(wǎng)關(guān) 進(jìn)來 根據(jù)消息 分發(fā)到不同子游戲 每個子游戲用單獨(dú)的worker來做 這種情況可行不
數(shù)據(jù)貢獻(xiàn)棋牌游戲類的 相對都不頻繁 redis是可以解決了的 主要是消息流轉(zhuǎn)這個過程 用戶鏈接到網(wǎng)關(guān) 進(jìn)入某個游戲桌子 需要分發(fā)到具體的游戲業(yè)務(wù)邏輯去處理 子游戲與子游戲之間 可以獨(dú)立啟動和維護(hù) 這樣相互隔離
舉例:
某游戲A服 對積分做一個操作 是需要發(fā)給單獨(dú)的 用戶數(shù)據(jù)服B處理 游戲服A 只處理業(yè)務(wù)邏輯 那A 和 數(shù)據(jù)處理服B 如何通信呢