鍍金池/ 問(wèn)答/HTML5  Python  C  C++  GO  HTML/ 網(wǎng)游服務(wù)端一般是怎么分層的?

網(wǎng)游服務(wù)端一般是怎么分層的?

我之前是做WEB開(kāi)發(fā)的,WEB開(kāi)發(fā)都講究分層,前后端MVC。

現(xiàn)在業(yè)余自己想做獨(dú)立游戲,所以開(kāi)始研究游戲服務(wù)端開(kāi)發(fā)了,主要用的編程語(yǔ)言是golang和c++,所以對(duì)這類(lèi)開(kāi)發(fā)的分層和架構(gòu)規(guī)劃不是很清楚。

我現(xiàn)在在做一款MMOFPS游戲,主要有進(jìn)入游戲大廳,然后登錄,匹配玩家,進(jìn)入游戲選擇英雄,進(jìn)入真正的游戲場(chǎng)景開(kāi)始游戲,然后結(jié)束返回戰(zhàn)績(jī)數(shù)據(jù),最后重新回到游戲大廳。

我看網(wǎng)上很多資料提到游戲服務(wù)端也有分層概念,比如說(shuō)最外層是gateway層負(fù)責(zé)維護(hù)客戶端長(zhǎng)連接,阻攔不合法的游戲請(qǐng)求等等,然后gateway再將它處理不了的數(shù)據(jù)給大廳服務(wù)端,聊天服務(wù)端,匹配服務(wù)器,場(chǎng)景服務(wù)器,AI服務(wù)器,游戲過(guò)程如果要反作弊還涉及到物理運(yùn)算服務(wù)器等等。

但是這個(gè)分類(lèi)還是太過(guò)于籠統(tǒng)。

  • 比如更實(shí)際一點(diǎn)的,UDP請(qǐng)求是無(wú)連接的,那么登錄之后是不是服務(wù)端要給客戶端一個(gè)像cookie一樣的token,客戶端每次都要發(fā)一個(gè)token到服務(wù)器來(lái)證明自己是某某玩家。
  • 并且如果發(fā)現(xiàn)兩臺(tái)客戶端主機(jī)同時(shí)請(qǐng)求一個(gè)帳號(hào),那么要T另一個(gè)人下線等等,這些操作是gateway層該處理的事情嗎?還
  • 有就是TCP的粘包分包處理以及UDP的包序重排序操作都是哪一層來(lái)處理呢?
  • 以及收到數(shù)據(jù)包之后,根據(jù)數(shù)據(jù)包類(lèi)型選擇丟給哪臺(tái)服務(wù)器來(lái)處理這種路由操作又是哪一層來(lái)做呢?
回答
編輯回答
擱淺

你說(shuō)的分層是服務(wù)器架構(gòu)的意思吧,現(xiàn)在服務(wù)器一般都是分布式的。上層接入服務(wù)器,登錄服務(wù)器、聊天服務(wù)器等等這些與游戲邏輯沒(méi)啥關(guān)系的服務(wù)器,下層就是n個(gè)負(fù)責(zé)游戲邏輯的GameServer。游戲客戶端往往是跟一個(gè)接入服務(wù)器做數(shù)據(jù)交換,由接入服務(wù)器根據(jù)具體請(qǐng)求分發(fā)消息。

2018年3月18日 14:54