0x00 分區(qū)的概念
經(jīng)常玩游戲的朋友都知道,下載完游戲届搁,注冊(cè)完賬號(hào),就要進(jìn)入選擇區(qū)服了,比如以前雙線機(jī)房還不普及的年代卡睦,會(huì)看到電信1區(qū)宴胧,電信2區(qū)。現(xiàn)在的游戲都是雙網(wǎng)環(huán)境了表锻,常見的分區(qū)如手Q1區(qū)恕齐,微信1區(qū)等。
0x01 分區(qū)服務(wù)器的設(shè)計(jì)
先來解決第一個(gè)問題瞬逊,這些區(qū)服的列表信息如何獲取显歧。一般的解決方案就是使用http請(qǐng)求來返回json數(shù)據(jù),我們稱這個(gè)服務(wù)器為索引服務(wù)器确镊,這個(gè)索引服務(wù)器可以做成多點(diǎn)負(fù)載均衡士骤,返回的json數(shù)據(jù)可以通過配置或是數(shù)據(jù)庫(kù)文件來完成,它是能滿足熱跟新和多點(diǎn)容災(zāi)切換的蕾域,簡(jiǎn)單的說它就是一個(gè)微服務(wù)拷肌。設(shè)計(jì)如下圖。
0x02 區(qū)服服務(wù)器的連接信息
每一個(gè)區(qū)服背后會(huì)關(guān)聯(lián)1個(gè)或是多個(gè)網(wǎng)關(guān)服務(wù)器旨巷,這些網(wǎng)關(guān)服務(wù)器會(huì)和賬號(hào)中心AccountServer保持連接巨缘,同時(shí)也會(huì)和服務(wù)器監(jiān)控中心CenterServer保持連接。AccountServer做的功能非常的簡(jiǎn)單專一采呐,就是對(duì)客戶端發(fā)過來的username和md5(password)做匹配校驗(yàn)若锁,并把校驗(yàn)后的結(jié)果返回給GateServer,再由GateServer返回給玩家斧吐。當(dāng)玩家的用戶校驗(yàn)成功的情況下又固,GateServer還會(huì)通知CenterServer,當(dāng)前的玩家的賬號(hào)驗(yàn)證通過会通,并且讓CenterServer按照一定的算法生成一個(gè)動(dòng)態(tài)的Token保存下來口予,并且把該Token發(fā)給客戶端保存下來,做為每次切換服務(wù)器的憑證涕侈,在玩家下線之后該Token失效沪停,下次上線的時(shí)候重新生成。同時(shí)CenterServer還兼任著管理賬號(hào)狀態(tài)的功能裳涛,比如該賬號(hào)是否有異常等木张。簡(jiǎn)單的講,就是客戶端每次在網(wǎng)關(guān)發(fā)起切換場(chǎng)景的時(shí)候端三,如果發(fā)生了切換進(jìn)程行為舷礼,都必須要攜帶Token進(jìn)行二次驗(yàn)證。這樣做的目的是什么呢郊闯,我們假設(shè)這樣一個(gè)場(chǎng)景妻献,當(dāng)玩家停留在角色選擇界面蛛株,沒有進(jìn)入到一個(gè)具體的場(chǎng)景,同時(shí)通訊協(xié)議被破解了育拨,而且沒有Token校驗(yàn)谨履,那外掛就很容易繞過登陸直接登陸場(chǎng)景了。
大區(qū)分好了熬丧,那里面的服又是怎么劃分的呢笋粟?我們現(xiàn)在通常看到的大區(qū)里面通常都是一組服務(wù)器析蝴,也就是說該區(qū)只劃分了一個(gè)游戲世界害捕。這里所說的游戲世界,就是一個(gè)賬號(hào)的角色所產(chǎn)生的所有數(shù)據(jù)闷畸。這樣說起來可能還是有點(diǎn)繞口尝盼,簡(jiǎn)單概括就是當(dāng)前的流行的微信1區(qū),其實(shí)這個(gè)1區(qū)就只有1個(gè)游戲世界腾啥,因?yàn)樗麄儾]有做多服的分配东涡,如果按照大型游戲的做法,1區(qū)內(nèi)還是可以劃分為1服倘待,2服的疮跑,當(dāng)然1服和2服加起來就是1個(gè)區(qū)下面有2個(gè)游戲世界了。
0x03 內(nèi)部服務(wù)器構(gòu)成
那1個(gè)游戲世界里又有哪些服務(wù)器呢凸舵,這個(gè)要看游戲的類型和復(fù)雜程度了祖娘,通常的做法是劃分為網(wǎng)關(guān)服務(wù)器GateServer,游戲服務(wù)器GameServer啊奄,地圖管理器MapServer渐苏,日志服務(wù)器LogServer,數(shù)據(jù)庫(kù)代理DBProxy菇夸,關(guān)系服務(wù)器RelationServer琼富,充值服務(wù)器BillingServer,當(dāng)然也有做的更加細(xì)分的庄新,如戰(zhàn)斗服務(wù)器BattleServer鞠眉,角色信息服務(wù)器InfoServer等等。這些可以根據(jù)架構(gòu)師的經(jīng)驗(yàn)和對(duì)項(xiàng)目的運(yùn)營(yíng)周期評(píng)估做出合理的剪裁择诈,沒有最好的架構(gòu)械蹋,只有最適合自己的。
總結(jié)一下羞芍,今天講的區(qū)服管理是進(jìn)入游戲前的第一步哗戈,它的邏輯簡(jiǎn)單容易理解,接下來的計(jì)劃就是模擬正常玩家的游戲生命周期來逐個(gè)環(huán)節(jié)的分析荷科,遇到重點(diǎn)的模塊會(huì)單獨(dú)的花點(diǎn)時(shí)間分析唯咬,比如任務(wù)纱注,戰(zhàn)場(chǎng),副本等胆胰。下一個(gè)章節(jié)我們講解賬號(hào)和角色管理奈附。