深入剖析MMORPG游戲服務(wù)器端的設(shè)計(jì)
時(shí)間:2008-12-07 14:40:00
來(lái)源:UltraLAB圖形工作站方案網(wǎng)站
人氣:3762
作者:admin
MMORPG不同于其它的局域網(wǎng)的網(wǎng)絡(luò)游戲,它是一個(gè)面向整個(gè)Internet的連接人數(shù)過(guò)萬(wàn)的網(wǎng)絡(luò)游戲,因此他的服務(wù)器端設(shè)計(jì)則極為重要
服務(wù)器的基本設(shè)置
在大型網(wǎng)絡(luò)游戲里,通常設(shè)計(jì)為C/S結(jié)構(gòu),客戶端不再對(duì)數(shù)據(jù)進(jìn)行邏輯處理,而只是一個(gè)收發(fā)裝置,從玩家那里接受到操作信息,然后反饋給服務(wù)器,再由服務(wù)器進(jìn)行處理后發(fā)回客戶端,經(jīng)客戶端通過(guò)圖形化處理,給玩家呈現(xiàn)出一個(gè)繽紛的游戲世界。
登陸服務(wù)器
在這里也可以稱之為連接服務(wù)器,網(wǎng)絡(luò)游戲的客戶端一般是連接到這里,然后再由該連接服務(wù)器根據(jù)不同的需要,把游戲消息轉(zhuǎn)發(fā)給其它相應(yīng)的服務(wù)器(邏輯和地圖服務(wù)器)也因?yàn)樗强蛻舳酥苯舆B接的對(duì)象,它同時(shí)也負(fù)擔(dān)了驗(yàn)證客戶身份的工作。
地圖服務(wù)器
在這里也可以稱之為連續(xù)事件服務(wù)器。在這個(gè)服務(wù)器里要處理的對(duì)象(玩家)所做的動(dòng)作都是一個(gè)連續(xù)事件。例如玩家從A點(diǎn)移動(dòng)到B點(diǎn),這樣一個(gè)動(dòng)作,需要一定的時(shí)間進(jìn)行移動(dòng),因此說(shuō)移動(dòng)是一個(gè)連續(xù)事件。
邏輯服務(wù)器
在這里可以稱之為瞬時(shí)事件服務(wù)器,在這個(gè)服務(wù)器里,處理對(duì)象(玩家)所做的動(dòng)作均可以在非常斷時(shí)間內(nèi)完成完成。例如玩家從商店購(gòu)買(mǎi)一瓶藥書(shū),當(dāng)玩家確認(rèn)購(gòu)買(mǎi)后,服務(wù)器先扣除玩家的游戲幣,然后再把相應(yīng)的藥水瓶加入玩家的背包里。這2個(gè)操作對(duì)于服務(wù)器來(lái)說(shuō),只是2個(gè)數(shù)字的加減,計(jì)算完這兩個(gè)數(shù)字的加減,這個(gè)事件就可以結(jié)束了。因此,我們可以說(shuō)這個(gè)事件是一個(gè)瞬時(shí)事件
服務(wù)器組的改進(jìn)
不過(guò)在實(shí)際應(yīng)用的過(guò)程中,游戲服務(wù)器的結(jié)構(gòu)要比上面所說(shuō)的3種服務(wù)結(jié)構(gòu)要復(fù)雜些,不過(guò)也都是在這3種最基本的服務(wù)器架構(gòu)下進(jìn)行擴(kuò)充,擴(kuò)充的主要是其它輔助功能。在實(shí)際應(yīng)用里可能增加的2種服務(wù)器,數(shù)據(jù)庫(kù)服務(wù)器,計(jì)費(fèi)服務(wù)器,由邏輯服務(wù)器獨(dú)立出來(lái)的聊天服務(wù)器。
數(shù)據(jù)庫(kù)服務(wù)器
數(shù)據(jù)庫(kù)服務(wù)器其實(shí)就是專(zhuān)門(mén)利用一臺(tái)服務(wù)器進(jìn)行數(shù)據(jù)庫(kù)的讀寫(xiě)操作。這點(diǎn)特別是在大型的網(wǎng)絡(luò)游戲里尤為重要。因?yàn)樵诖笮途W(wǎng)絡(luò)游戲里,要處理玩家的數(shù)據(jù)量非常大,如果不利用專(zhuān)門(mén)的服務(wù)器進(jìn)行處理,很有可能會(huì)拖累這個(gè)服務(wù)器組。
計(jì)費(fèi)服務(wù)器
通常在商業(yè)的網(wǎng)絡(luò)游戲里出現(xiàn),用于記錄玩家在線的時(shí)間,給收費(fèi)提供依據(jù),同時(shí)也是整個(gè)服務(wù)器組里最重要的部分,一旦出現(xiàn)問(wèn)題,運(yùn)營(yíng)商就不用賺錢(qián)了。
聊天服務(wù)器
在游戲里的聊天功能是屬于一種瞬時(shí)動(dòng)作,理論上是放在邏輯服務(wù)器里進(jìn)行處理。不過(guò)在大型網(wǎng)絡(luò)游戲里,因?yàn)檫@個(gè)部分功能與游戲里的其它部分聯(lián)系并不緊密,因此可以獨(dú)立出來(lái)做一個(gè)功能服務(wù)器。
服務(wù)器的集群設(shè)置
在大型游戲的應(yīng)用過(guò)程中,實(shí)際需要處理的玩家數(shù)量可能過(guò)萬(wàn),一臺(tái)普通的服務(wù)器是無(wú)法完成所要完成的工作,因此,在實(shí)際應(yīng)用的時(shí)候,通常是由一組多臺(tái)服務(wù)器共同完成一個(gè)功能。
例如地圖服務(wù)器,可以根據(jù)需要,把游戲里所有的地域進(jìn)行劃分,劃分為N個(gè)區(qū)域,然后讓這一個(gè)區(qū)域里發(fā)生的事件都用一個(gè)特定的服務(wù)器進(jìn)行處理。這樣做的目的是減少一個(gè)服務(wù)器所承擔(dān)的計(jì)算量,把整個(gè)系統(tǒng)組成一個(gè)分布式的網(wǎng)絡(luò)。
不過(guò)這樣做的同時(shí)會(huì)造成一個(gè)麻煩:當(dāng)一位玩家從區(qū)域1,移動(dòng)到區(qū)域2。這個(gè)時(shí)候,就必須先在服務(wù)器1里把玩家刪除,然后再在區(qū)域2里加入玩家。同時(shí)需要由服務(wù)器1向服務(wù)器2轉(zhuǎn)移玩家的數(shù)據(jù)信息(因?yàn)榉?wù)器組在工作的時(shí)候,玩家的信息只能保存在當(dāng)前所在區(qū)域的服務(wù)器里),也就是說(shuō)一旦玩家發(fā)生服務(wù)器間區(qū)域移動(dòng),服務(wù)器端就不可避免的造成數(shù)據(jù)通訊。因?yàn)檫@種移動(dòng)并不是有規(guī)律的,玩家所在的服務(wù)器都有可能到達(dá)其它服務(wù)器。這???綣??衿髯槔鎘蠳臺(tái)地圖服務(wù)器,那么,每個(gè)服務(wù)器都可能向其它N-1臺(tái)服務(wù)器產(chǎn)生連接,總共就可能產(chǎn)生N×N個(gè)連接。如此數(shù)量連接如果只是使用普通的socket設(shè)計(jì),就很有可能會(huì)給服務(wù)器通訊間的各種問(wèn)題所困擾,為此,在商業(yè)網(wǎng)絡(luò)游戲的服務(wù)器之間,通常都使用成熟的第三方的通訊中間件,如ACE,ICE等作為網(wǎng)絡(luò)連接的傳輸層。 #p#page_title#e#
服務(wù)器的基本設(shè)置
在大型網(wǎng)絡(luò)游戲里,通常設(shè)計(jì)為C/S結(jié)構(gòu),客戶端不再對(duì)數(shù)據(jù)進(jìn)行邏輯處理,而只是一個(gè)收發(fā)裝置,從玩家那里接受到操作信息,然后反饋給服務(wù)器,再由服務(wù)器進(jìn)行處理后發(fā)回客戶端,經(jīng)客戶端通過(guò)圖形化處理,給玩家呈現(xiàn)出一個(gè)繽紛的游戲世界。
登陸服務(wù)器
在這里也可以稱之為連接服務(wù)器,網(wǎng)絡(luò)游戲的客戶端一般是連接到這里,然后再由該連接服務(wù)器根據(jù)不同的需要,把游戲消息轉(zhuǎn)發(fā)給其它相應(yīng)的服務(wù)器(邏輯和地圖服務(wù)器)也因?yàn)樗强蛻舳酥苯舆B接的對(duì)象,它同時(shí)也負(fù)擔(dān)了驗(yàn)證客戶身份的工作。
地圖服務(wù)器
在這里也可以稱之為連續(xù)事件服務(wù)器。在這個(gè)服務(wù)器里要處理的對(duì)象(玩家)所做的動(dòng)作都是一個(gè)連續(xù)事件。例如玩家從A點(diǎn)移動(dòng)到B點(diǎn),這樣一個(gè)動(dòng)作,需要一定的時(shí)間進(jìn)行移動(dòng),因此說(shuō)移動(dòng)是一個(gè)連續(xù)事件。
邏輯服務(wù)器
在這里可以稱之為瞬時(shí)事件服務(wù)器,在這個(gè)服務(wù)器里,處理對(duì)象(玩家)所做的動(dòng)作均可以在非常斷時(shí)間內(nèi)完成完成。例如玩家從商店購(gòu)買(mǎi)一瓶藥書(shū),當(dāng)玩家確認(rèn)購(gòu)買(mǎi)后,服務(wù)器先扣除玩家的游戲幣,然后再把相應(yīng)的藥水瓶加入玩家的背包里。這2個(gè)操作對(duì)于服務(wù)器來(lái)說(shuō),只是2個(gè)數(shù)字的加減,計(jì)算完這兩個(gè)數(shù)字的加減,這個(gè)事件就可以結(jié)束了。因此,我們可以說(shuō)這個(gè)事件是一個(gè)瞬時(shí)事件
服務(wù)器組的改進(jìn)
不過(guò)在實(shí)際應(yīng)用的過(guò)程中,游戲服務(wù)器的結(jié)構(gòu)要比上面所說(shuō)的3種服務(wù)結(jié)構(gòu)要復(fù)雜些,不過(guò)也都是在這3種最基本的服務(wù)器架構(gòu)下進(jìn)行擴(kuò)充,擴(kuò)充的主要是其它輔助功能。在實(shí)際應(yīng)用里可能增加的2種服務(wù)器,數(shù)據(jù)庫(kù)服務(wù)器,計(jì)費(fèi)服務(wù)器,由邏輯服務(wù)器獨(dú)立出來(lái)的聊天服務(wù)器。
數(shù)據(jù)庫(kù)服務(wù)器
數(shù)據(jù)庫(kù)服務(wù)器其實(shí)就是專(zhuān)門(mén)利用一臺(tái)服務(wù)器進(jìn)行數(shù)據(jù)庫(kù)的讀寫(xiě)操作。這點(diǎn)特別是在大型的網(wǎng)絡(luò)游戲里尤為重要。因?yàn)樵诖笮途W(wǎng)絡(luò)游戲里,要處理玩家的數(shù)據(jù)量非常大,如果不利用專(zhuān)門(mén)的服務(wù)器進(jìn)行處理,很有可能會(huì)拖累這個(gè)服務(wù)器組。
計(jì)費(fèi)服務(wù)器
通常在商業(yè)的網(wǎng)絡(luò)游戲里出現(xiàn),用于記錄玩家在線的時(shí)間,給收費(fèi)提供依據(jù),同時(shí)也是整個(gè)服務(wù)器組里最重要的部分,一旦出現(xiàn)問(wèn)題,運(yùn)營(yíng)商就不用賺錢(qián)了。
聊天服務(wù)器
在游戲里的聊天功能是屬于一種瞬時(shí)動(dòng)作,理論上是放在邏輯服務(wù)器里進(jìn)行處理。不過(guò)在大型網(wǎng)絡(luò)游戲里,因?yàn)檫@個(gè)部分功能與游戲里的其它部分聯(lián)系并不緊密,因此可以獨(dú)立出來(lái)做一個(gè)功能服務(wù)器。
服務(wù)器的集群設(shè)置
在大型游戲的應(yīng)用過(guò)程中,實(shí)際需要處理的玩家數(shù)量可能過(guò)萬(wàn),一臺(tái)普通的服務(wù)器是無(wú)法完成所要完成的工作,因此,在實(shí)際應(yīng)用的時(shí)候,通常是由一組多臺(tái)服務(wù)器共同完成一個(gè)功能。
例如地圖服務(wù)器,可以根據(jù)需要,把游戲里所有的地域進(jìn)行劃分,劃分為N個(gè)區(qū)域,然后讓這一個(gè)區(qū)域里發(fā)生的事件都用一個(gè)特定的服務(wù)器進(jìn)行處理。這樣做的目的是減少一個(gè)服務(wù)器所承擔(dān)的計(jì)算量,把整個(gè)系統(tǒng)組成一個(gè)分布式的網(wǎng)絡(luò)。
不過(guò)這樣做的同時(shí)會(huì)造成一個(gè)麻煩:當(dāng)一位玩家從區(qū)域1,移動(dòng)到區(qū)域2。這個(gè)時(shí)候,就必須先在服務(wù)器1里把玩家刪除,然后再在區(qū)域2里加入玩家。同時(shí)需要由服務(wù)器1向服務(wù)器2轉(zhuǎn)移玩家的數(shù)據(jù)信息(因?yàn)榉?wù)器組在工作的時(shí)候,玩家的信息只能保存在當(dāng)前所在區(qū)域的服務(wù)器里),也就是說(shuō)一旦玩家發(fā)生服務(wù)器間區(qū)域移動(dòng),服務(wù)器端就不可避免的造成數(shù)據(jù)通訊。因?yàn)檫@種移動(dòng)并不是有規(guī)律的,玩家所在的服務(wù)器都有可能到達(dá)其它服務(wù)器。這???綣??衿髯槔鎘蠳臺(tái)地圖服務(wù)器,那么,每個(gè)服務(wù)器都可能向其它N-1臺(tái)服務(wù)器產(chǎn)生連接,總共就可能產(chǎn)生N×N個(gè)連接。如此數(shù)量連接如果只是使用普通的socket設(shè)計(jì),就很有可能會(huì)給服務(wù)器通訊間的各種問(wèn)題所困擾,為此,在商業(yè)網(wǎng)絡(luò)游戲的服務(wù)器之間,通常都使用成熟的第三方的通訊中間件,如ACE,ICE等作為網(wǎng)絡(luò)連接的傳輸層。 #p#page_title#e#