開發(fā)語言
服務(wù)器和客戶端都使用typescript來開發(fā),并且雙端使用同一種語言可以共享邏輯代碼。
typescript是javascript的超集,最終會編譯成javacsript使用,在大型項目的體驗遠勝過javascript。
開發(fā)框架和引擎
客戶端采用laya引擎
服務(wù)器采用nodejs
兩端通過socket.io來通信,保持長鏈接。
因為微信小游戲必須是https的連接,用nginx做了反向代理。
服務(wù)器拓撲
層級圖如下:

TopCenter: 集群中心(唯一)
Center:中心(一臺物理機器一個)
Game:游戲服務(wù)器(一般一臺物理機器可以開多個)
Gate:網(wǎng)關(guān)(和客戶端通信,一般一個游戲開2個足夠)
nginx: 反向代理。
服務(wù)器集群
分為三個集群:測試,提審,正式;這三個集群不互通包括數(shù)據(jù)庫。
對應(yīng)微信小游戲的后臺就是體驗,提審和正式。
測試服是可以使用GM命令來測試的,并且充值任何都是1塊錢(省錢)。
提審和正式則沒有。
通過正式集群數(shù)據(jù)庫的版本號的配置,來確定客戶端登入哪一個集群。
服務(wù)器壓力測試
采購騰訊云4核(2.7/3.3GHZ)16GB的服務(wù)器,承載5000人
此時cpu大概在50%,內(nèi)存占25%
每個服務(wù)器進入1500人,那么峰值一般在300-500,那么1臺機器可以開10臺服務(wù)器。隨著時間過去,人數(shù)減少,一臺物理服務(wù)器可以承載更多。
自動開服
一般在一臺云服務(wù)器配置10個游戲服務(wù)器(game),在數(shù)據(jù)庫配置好這些服務(wù)器的開服時間,到了時間才能被客戶端檢索到,也就自動開了。
客戶端選擇服務(wù)器的邏輯是,有登錄就進最近的登錄的游戲服,否則就進最新開的服務(wù)器。
數(shù)據(jù)庫
TopCenter集群中心用mysql數(shù)據(jù)庫,每日自動備份
Center用levelDB數(shù)據(jù)庫,因為levelDB是文件數(shù)據(jù)庫,只能在每次重啟時備份。
服務(wù)器維護
正式服維護,就是把提審服的代碼同步到所有物理機器。
使用nodejs的pm2作為運維工具,可以做到秒級的重啟。
但是游戲內(nèi)的玩家需要存檔,預(yù)計要幾分鐘。
并且Center用levelDB數(shù)據(jù)庫是文件數(shù)據(jù)庫,不能熱備,只能重啟時備份。
所以一般的服務(wù)器更新需要半個小時左右。
客戶端版本管理
客戶端只有一條主干,并沒有使用分支開發(fā)。
新開發(fā)的功能在數(shù)據(jù)庫屏蔽掉其入口即可,如果放出,只需要解除屏蔽即可。
GM權(quán)限
在測試服GM可以使用GM指令。
在正式服的服務(wù)器列表,GM可以看到所有服務(wù)器,也可以進入未到開放時間的服務(wù)器,不受開服時間的限制。
一些特殊的機制
相同的游戲角色,新的會頂?shù)襞f的登錄,比如網(wǎng)頁微信會頂?shù)羰謾C微信。
角色離線后,三十分鐘會踢出游戲(此時再重連會回到登錄)。
ios離開(息屏,切換等)超過10秒,會立即重連服務(wù)器。(ios網(wǎng)絡(luò)斷線難以判定,比較粗暴的做法。)
充值付費領(lǐng)取的獎勵,必須手動點掉,這次不點下次上線會再次彈出。(防止玩家誤判)