重新定義傳統(tǒng)MMORPG通訊模式的思考
引言在當(dāng)前MMORPG市場(chǎng)上,很多游戲都呈現(xiàn)出同質(zhì)化的趨勢(shì)。作為技術(shù)人員,我們應(yīng)該總結(jié)經(jīng)驗(yàn)并探索新的開(kāi)發(fā)模式,以提高項(xiàng)目的效率和創(chuàng)新性。問(wèn)題分析一般來(lái)說(shuō),MMORPG服務(wù)器需要解決以下幾個(gè)核心問(wèn)題:-
引言
在當(dāng)前MMORPG市場(chǎng)上,很多游戲都呈現(xiàn)出同質(zhì)化的趨勢(shì)。作為技術(shù)人員,我們應(yīng)該總結(jié)經(jīng)驗(yàn)并探索新的開(kāi)發(fā)模式,以提高項(xiàng)目的效率和創(chuàng)新性。
問(wèn)題分析
一般來(lái)說(shuō),MMORPG服務(wù)器需要解決以下幾個(gè)核心問(wèn)題:
- 同步玩家的位置和狀態(tài)
- 提供聊天服務(wù),方便玩家間的文字交流
- 設(shè)立信息發(fā)布渠道,向玩家傳遞重要信息
- 實(shí)現(xiàn)任務(wù)NPC與玩家的一對(duì)一交流
- 玩家調(diào)整裝備(可視為和特定NPC進(jìn)行交互)
以上需求可以進(jìn)一步細(xì)分和分解,并采用不同的實(shí)現(xiàn)方式。
解決方案
針對(duì)需求分析中提到的問(wèn)題,我們可以進(jìn)行如下改進(jìn)和封裝:
1. 同步玩家狀態(tài):玩家自行提交最新的狀態(tài)信息,服務(wù)器將其廣播給其他玩家。
2. 聊天服務(wù):玩家通過(guò)訂閱聊天頻道并按權(quán)限發(fā)布信息進(jìn)行交流。
3. 信息發(fā)布:將其視為一種特殊的聊天頻道進(jìn)行處理。
4. 任務(wù)NPC和裝備調(diào)整:類似于向特定節(jié)點(diǎn)發(fā)送請(qǐng)求并等待回復(fù)。
目前,我在幾個(gè)MMO項(xiàng)目中參與過(guò)簡(jiǎn)單的實(shí)現(xiàn)。不管是服務(wù)器端還是客戶端,都是運(yùn)行一個(gè)消息循環(huán),對(duì)接收到的消息包進(jìn)行處理。通常會(huì)有計(jì)時(shí)器消息源和網(wǎng)絡(luò)包消息源,共同構(gòu)成最終的消息源,主程序采用標(biāo)準(zhǔn)的消息循環(huán)分發(fā)結(jié)構(gòu)。
但是與前面的需求相比,這種方式顯得有些粗糙。我們可以在此基礎(chǔ)上進(jìn)行更高層次的封裝工作,以便分離處理不同的需求,并更方便地解決某些有狀態(tài)的需求或?qū)π畔⑻幚磉M(jìn)行優(yōu)先級(jí)排序。
最近,我受到zeromq設(shè)計(jì)思想的影響較多。對(duì)于未來(lái)的項(xiàng)目設(shè)計(jì)方法,我有了一些想法需要總結(jié)整理。
新的通訊模式思路
在玩家客戶端和游戲服務(wù)器方面,我傾向于使用單一的TCP連接,并在其上添加多個(gè)通訊信道的模擬。這樣可以實(shí)現(xiàn)zeromq提出的幾種模式的變形。
從我的角度來(lái)看,MMORPG服務(wù)器可以看作是多個(gè)服務(wù)的集合。無(wú)論這些服務(wù)部署在何處,我希望它們都能在一個(gè)邏輯網(wǎng)絡(luò)中運(yùn)行。玩家通過(guò)網(wǎng)關(guān)接入該網(wǎng)絡(luò),并根據(jù)授權(quán)使用網(wǎng)絡(luò)上的服務(wù)。
在忽略玩家登錄和注冊(cè)流程的情況下,典型的場(chǎng)景是玩家在虛擬場(chǎng)景中漫步。這可以被視為客戶端訂閱特定場(chǎng)景的環(huán)境。訂閱本身需要進(jìn)行授權(quán),服務(wù)器會(huì)檢查玩家是否有權(quán)訂閱(即玩家是否在該場(chǎng)景中)。場(chǎng)景會(huì)不斷發(fā)布場(chǎng)景中每個(gè)玩家和NPC的動(dòng)態(tài)信息。訂閱者將持續(xù)獲取這些信息。為了解決性能問(wèn)題,我們可以將不同類型的信息放置在不同的訂閱點(diǎn)上,根據(jù)需求進(jìn)行訂閱。
玩家可以選擇向特定場(chǎng)景推送自己的狀態(tài)數(shù)據(jù),根據(jù)zeromq的模式,這應(yīng)該采用另一個(gè)信道進(jìn)行。
每個(gè)可對(duì)話的NPC都可以看作是一個(gè)特定的服務(wù)。玩家與其建立連接,然后以請(qǐng)求/回復(fù)模式進(jìn)行工作。這樣可以方便地完成帶有狀態(tài)的任務(wù)。同樣,建立連接的過(guò)程可以引入授權(quán)機(jī)制(如檢查玩家是否在NPC附近)。當(dāng)然,NPC也需要訂閱場(chǎng)景,以便在與他們交互的玩家離開(kāi)場(chǎng)景時(shí)自動(dòng)斷開(kāi)連接。
戰(zhàn)斗部分的處理可以獨(dú)立出來(lái)。以實(shí)時(shí)戰(zhàn)斗為例,戰(zhàn)斗計(jì)算服務(wù)訂閱場(chǎng)景中對(duì)象的位置和動(dòng)作,并計(jì)算它們的后果,包括每次攻擊的傷害值。戰(zhàn)斗計(jì)算服務(wù)本身也是一個(gè)信息訂閱點(diǎn),玩家通過(guò)訂閱該服務(wù)可以了解場(chǎng)景中每個(gè)個(gè)體受到的傷害情況。
類似地,某些增值服務(wù)(如自動(dòng)尋路)也可以獨(dú)立實(shí)現(xiàn)。
總結(jié)
以上只是一些初步的想法,我希望能夠整理出更多啟發(fā)性的內(nèi)容,無(wú)論對(duì)他人還是對(duì)自己都有所幫助。通過(guò)重新定義傳統(tǒng)MMORPG通訊模式,我們可以提高開(kāi)發(fā)效率、創(chuàng)造更具創(chuàng)新性的游戲體驗(yàn),為玩家?guī)?lái)更好的娛樂(lè)享受。