游戲服務(wù)端在整個游戲業(yè)務(wù)中扮演著提供服務(wù)的角色。所謂的“服務(wù)”總結(jié)下來基本就是三種:網(wǎng)絡(luò)通信,計(jì)算,存儲。
網(wǎng)絡(luò)通信是基礎(chǔ)。不管是什么類型的游戲(即時戰(zhàn)斗,回合制;卡牌,RPG;滾服,大通服)都需要進(jìn)行網(wǎng)絡(luò)通信。網(wǎng)絡(luò)通信包括客戶端-服務(wù)端的通信,服務(wù)器之間的通信,服務(wù)器-外部服務(wù)器的通信。
客戶端和服務(wù)端的通信很好理解,網(wǎng)絡(luò)游戲中玩家數(shù)據(jù)都是保存在服務(wù)端的數(shù)據(jù)庫中的,客戶端所展示的所有的數(shù)據(jù),模型等都是從服務(wù)端取到的,并且客戶端修改玩家數(shù)據(jù)也是要和服務(wù)端進(jìn)行通信。
服務(wù)端之間的通信,服務(wù)端的架構(gòu)可能會存在網(wǎng)關(guān)服務(wù)器,登陸服務(wù)器,聊天服務(wù)器,游戲服務(wù)器,支付服務(wù)器,戰(zhàn)斗服務(wù)器等多個進(jìn)程存在,當(dāng)某個消息到達(dá)后會在多個服務(wù)器進(jìn)程之間進(jìn)行流轉(zhuǎn)才能完成一個操作,因?yàn)榉?wù)器之間也要進(jìn)行通信。
服務(wù)器和外部服務(wù)器的通信,這里所說的外部服務(wù)器指sdk服務(wù)器等,這些服務(wù)器不是游戲開發(fā)者管理的,他們之間存在一些數(shù)據(jù)的傳輸和確認(rèn)等操作,因此也會有網(wǎng)路通信。
計(jì)算:這里所說的計(jì)算泛指業(yè)務(wù)邏輯執(zhí)行。
比如戰(zhàn)斗。戰(zhàn)斗的過程是根據(jù)玩家釋放的某個英雄的技能,以及基礎(chǔ)屬性和其他裝備,陣容,稱號,等屬性值或者buff計(jì)算出傷害,和一系列的客戶端用于展示的數(shù)據(jù)。這個過程就是在服務(wù)端進(jìn)行一系列的邏輯計(jì)算,然后將這些計(jì)算出來的數(shù)據(jù)發(fā)給客戶端用于展示戰(zhàn)斗過程。
再比如購買一個道具,在服務(wù)端是先計(jì)算是否有足夠的貨幣,如果足夠的話,就要將貨幣減去道具價格對應(yīng)的貨幣數(shù)量,對剩余貨幣數(shù)量進(jìn)行保存并給玩家發(fā)一個道具。
存儲:是指永久性的存儲玩家數(shù)據(jù)。不管玩家下線,或者服務(wù)器關(guān)閉,都要保證玩家下次進(jìn)入游戲后,玩家數(shù)據(jù)(包括貨幣,裝備,陣容,英雄等)都是玩家最后一次操作后的數(shù)據(jù),不能被改動。當(dāng)然要排除一些不需要保存的數(shù)據(jù)。
綜上:不管是多么復(fù)雜的游戲業(yè)務(wù),基本都是基于這三種基本的服務(wù)上發(fā)展起來的。理解了服務(wù)端的本質(zhì)后,可以跳出具體的游戲業(yè)務(wù)玩法,在更高層次上看待如何為游戲業(yè)務(wù)提供服務(wù)。從而在做服務(wù)端技術(shù)選型以及做架構(gòu)方案的設(shè)計(jì)時心中就有了大方向和思路。