專利名稱:采用全事件驅(qū)動(dòng)的高效分布式游戲服務(wù)器的通信方法
采用全事件驅(qū)動(dòng)的高效分布式游戲服務(wù)器的通信方法
技術(shù)領(lǐng)域:
本發(fā)明涉及網(wǎng)絡(luò)游戲系統(tǒng),具體是指一種采用全事件驅(qū)動(dòng)的高效分布式游戲服務(wù)器的通信方法。
背景技術(shù):
目前,網(wǎng)絡(luò)游戲日益變得普及。網(wǎng)絡(luò)游戲以互聯(lián)網(wǎng)為傳輸媒介,以游戲運(yùn)營(yíng)商服務(wù)器和用戶計(jì)算機(jī)為處理終端,以游戲客戶端軟件為信息交互窗口,旨在實(shí)現(xiàn)娛樂、休閑、通訊交流和取得虛擬成就,具有相當(dāng)可持續(xù)性。與此同時(shí),游戲運(yùn)營(yíng)商所構(gòu)建的服務(wù)器也日益龐大。現(xiàn)有的游戲服務(wù)·器的通信方法,一般采用的是,在一個(gè)while循環(huán)時(shí)先取出邏輯隊(duì)列里的數(shù)據(jù)(邏輯隊(duì)列的數(shù)據(jù)一般指的是邏輯層要發(fā)送的數(shù)據(jù)),然后把這些數(shù)據(jù)放入到通信處理隊(duì)列由通信線程進(jìn)行發(fā)送處理,在處理到一定條件下,例如,發(fā)的數(shù)量達(dá)到某個(gè)數(shù)量級(jí)或是邏輯隊(duì)列里的數(shù)據(jù)已經(jīng)發(fā)送完,那么就跳出發(fā)的流程去收一次客戶端數(shù)據(jù),如果收和發(fā)都沒有數(shù)據(jù)要處理,那么這個(gè)通信處理線程將等待500毫秒(500毫秒是為了防止線程進(jìn)入死循環(huán),這里只是舉例說明,等待時(shí)間不一定是500毫秒)再進(jìn)行收發(fā)數(shù)據(jù)處理。這樣的通信方法效率低,處理數(shù)據(jù)不夠及時(shí)。有鑒于此,本發(fā)明人針對(duì)現(xiàn)有技術(shù)的缺陷深入研究,并有本案產(chǎn)生。
發(fā)明內(nèi)容本發(fā)明所要解決的技術(shù)問題在于提供一種采用全事件驅(qū)動(dòng)的高效分布式游戲服務(wù)器的通信方法。本發(fā)明是這樣實(shí)現(xiàn)的:采用全事件驅(qū)動(dòng)的高效分布式游戲服務(wù)器的通信方法,所述游戲服務(wù)器包括:網(wǎng)關(guān)服務(wù)器、主服務(wù)器、結(jié)點(diǎn)服務(wù)器、數(shù)據(jù)庫(kù)服務(wù)器、全局服務(wù)器以及NPC服務(wù)器;所述通信方法包括:將NPC服務(wù)器作為結(jié)點(diǎn)服務(wù)器的一個(gè)線程;各服務(wù)器間通信部分除了用于接收客戶端消息的網(wǎng)關(guān)服務(wù)器采用的是IOCP外,其它部分服務(wù)器間的通信都采用的是socket事件,服務(wù)器內(nèi)部線程間的通信部分采用的是隊(duì)列事件;在服務(wù)器的通信線程每次執(zhí)行while循環(huán)時(shí),socket事件與隊(duì)列事件同時(shí)進(jìn)行。進(jìn)一步地,所述隊(duì)列事件包括如下步驟:步驟10:設(shè)直所需事件;步驟11:檢測(cè)所需事件;步驟12:判斷是否有事件,是,則轉(zhuǎn)入步驟13,否,則轉(zhuǎn)入步驟10 ;步驟13:放入事件相應(yīng)的處理隊(duì)列。進(jìn)一步地,所述socket事件包括如下步驟:
步驟20:檢測(cè)socket是否有效,是,轉(zhuǎn)入步驟21,否,轉(zhuǎn)入步驟25 ;步驟21:設(shè)置所需事件;步驟22:檢測(cè)所需事件;步驟23:判斷是否有事件,是,則轉(zhuǎn)入步驟24,否,則轉(zhuǎn)入步驟20 ;步驟24:放入邏輯層隊(duì)列以使邏輯層進(jìn)行處理;步驟25:刪除無效socket。本發(fā)明的優(yōu)點(diǎn)在于:采用全事件驅(qū)動(dòng)方式來實(shí)現(xiàn)整個(gè)服務(wù)器的通信方法,事件socket以及事件隊(duì)列的組合使用能夠做到高效、及時(shí)的處理服務(wù)器間以及服務(wù)器內(nèi)線程間的消息通信。
下面參照附圖結(jié)合實(shí)施例對(duì)本發(fā)明作進(jìn)一步的描述。圖1是本發(fā)明中服務(wù)器架構(gòu)圖。圖2是本發(fā)明中隊(duì)列事件流程圖。圖3是本發(fā)明中socket事件流程圖。
具體實(shí)施方式如圖1所示,整個(gè)游戲服務(wù)器分為:網(wǎng)關(guān)服務(wù)器、主服務(wù)器、結(jié)點(diǎn)服務(wù)器、數(shù)據(jù)庫(kù)服務(wù)器、全局服務(wù)器以及NPC 服務(wù)器。為了減少開發(fā)的復(fù)雜度、服務(wù)器配置以及搭建的復(fù)雜度,本發(fā)明把NPC服務(wù)器做為結(jié)點(diǎn)服務(wù)器的一個(gè)線程。為了提高在線人數(shù),把結(jié)點(diǎn)服務(wù)器(也可稱為邏輯游戲服務(wù)器)按照地圖組來劃分,劃分成多個(gè)結(jié)點(diǎn)服務(wù)器。為了提高各服務(wù)器間以及服務(wù)器內(nèi)各線程間的消息響應(yīng)速度,在各服務(wù)器間通信部分除了用于接收客戶端消息的網(wǎng)關(guān)服務(wù)器采用的是IOCP外,其它部分服務(wù)器間的通信都采用的是事件socket,服務(wù)器內(nèi)部線程間的通信部分采用的是事件隊(duì)列。對(duì)于這些事件的處理方法是:在服務(wù)器的通信線程每次執(zhí)行while循環(huán)中去設(shè)置自己想要的事件,然后去檢測(cè)這些設(shè)置的事件(如果都沒事件到來,那么等待事件的超時(shí)間為50毫秒),在檢測(cè)這些事件的過程中,將有事件觸發(fā)的事件置個(gè)標(biāo)示,以表明有相應(yīng)的事件到來,然后根據(jù)這個(gè)標(biāo)示把這些事件信息放到邏輯層的相應(yīng)對(duì)列中,由邏輯層去處理具體的事務(wù)。如圖2所示,是隊(duì)列事件流程圖。詳細(xì)步驟如下:步驟10:設(shè)置所需事件;步驟11:檢測(cè)所需事件;步驟12:判斷是否有事件,是,則轉(zhuǎn)入步驟13,否,則轉(zhuǎn)入步驟10 ;步驟13:放入事件相應(yīng)的處理隊(duì)列。如圖3所示,是socket事件流程圖。詳細(xì)步驟如下:步驟20:檢測(cè)socket是否有效,是,轉(zhuǎn)入步驟21,否,轉(zhuǎn)入步驟25 ;步驟21:設(shè)直所需事件;步驟22:檢測(cè)所需事件;步驟23:判斷是否有事件,是,則轉(zhuǎn)入步驟24,否,則轉(zhuǎn)入步驟20 ;步驟24:放入邏輯層隊(duì)列以使邏輯層進(jìn)行處理;
步驟25:刪除無效socket。所需事件包括:線程間通信的隊(duì)列事件以及進(jìn)程間通信的socket收消息事件、發(fā)消息事件以及接受連接事件;檢測(cè)過程中是根據(jù)所需事件是否有事件觸發(fā)來判斷是否有對(duì)應(yīng)的消息要處理,t匕如線程間通信的消息,在消息進(jìn)隊(duì)列的時(shí)候我們首先判斷這個(gè)消息隊(duì)列是否為空隊(duì)列,如果是我們把這個(gè)消息隊(duì)列置為有信號(hào),當(dāng)消息都處理完之后把這個(gè)隊(duì)列又置為無信號(hào)。本發(fā)明采用全事件驅(qū)動(dòng)方式來實(shí)現(xiàn)整個(gè)服務(wù)器的通信方法,事件套接字以及事件隊(duì)列的組合使用能夠做到高效、及時(shí)的處理服務(wù)器間以及服務(wù)器內(nèi)線程間的消息通信。以上所述僅為本發(fā)明的較佳實(shí)施用例而已,并非用于限定本發(fā)明的保護(hù)范圍。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換以及改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
權(quán)利要求
1.采用全事件驅(qū)動(dòng)的高效分布式游戲服務(wù)器的通信方法,所述游戲服務(wù)器包括:網(wǎng)關(guān)服務(wù)器、主服務(wù)器、結(jié)點(diǎn)服務(wù)器、數(shù)據(jù)庫(kù)服務(wù)器、全局服務(wù)器以及NPC服務(wù)器;其特征在于:所述通信方法包括: 將NPC服務(wù)器作為結(jié)點(diǎn)服務(wù)器的一個(gè)線程; 各服務(wù)器間通信部分除了用于接收客戶端消息的網(wǎng)關(guān)服務(wù)器采用的是IOCP外,其它部分服務(wù)器間的通信都采用的是socket事件,服務(wù)器內(nèi)部線程間的通信部分采用的是隊(duì)列事件; 在服務(wù)器的通信線程每次執(zhí)行while循環(huán)時(shí),socket事件與隊(duì)列事件同時(shí)進(jìn)行。
2.如權(quán)利要求1所述的采用全事件驅(qū)動(dòng)的高效分布式游戲服務(wù)器的通信方法,其特征在于:所述隊(duì)列事件包括如下步驟: 步驟10:設(shè)置所需事件; 步驟11:檢測(cè)所需事件; 步驟12:判斷是否有事件,是,則轉(zhuǎn)入步驟13,否,則轉(zhuǎn)入步驟10 ; 步驟13:放入事件相應(yīng)的處理隊(duì)列。
3.如權(quán)利要求1所述的采用全事件驅(qū)動(dòng)的高效分布式游戲服務(wù)器的通信方法,其特征在于:所述socket事件包括如下步驟: 步驟20:檢測(cè)socket是否有效,是,轉(zhuǎn)入步驟21,否,轉(zhuǎn)入步驟25 ; 步驟21:設(shè)置所需事件; 步驟22:檢測(cè)所需事件; 步驟23:判斷是否有事件,是,則轉(zhuǎn)入步驟24,否,則轉(zhuǎn)入步驟20 ; 步驟24:放入邏輯層隊(duì)列以使邏輯層進(jìn)行處理; 步驟25:刪除無效socket。
全文摘要
采用全事件驅(qū)動(dòng)的高效分布式游戲服務(wù)器的通信方法,所述游戲服務(wù)器包括網(wǎng)關(guān)服務(wù)器、主服務(wù)器、結(jié)點(diǎn)服務(wù)器、數(shù)據(jù)庫(kù)服務(wù)器、全局服務(wù)器以及NPC服務(wù)器;所述通信方法包括將NPC服務(wù)器作為結(jié)點(diǎn)服務(wù)器的一個(gè)線程;各服務(wù)器間通信部分除了用于接收客戶端消息的網(wǎng)關(guān)服務(wù)器采用的是IOCP外,其它部分服務(wù)器間的通信都采用的是socket事件,服務(wù)器內(nèi)部線程間的通信部分采用的是隊(duì)列事件;在服務(wù)器的通信線程每次執(zhí)行while循環(huán)時(shí),socket事件與隊(duì)列事件同時(shí)進(jìn)行。本發(fā)明采用全事件驅(qū)動(dòng)方式來實(shí)現(xiàn)整個(gè)服務(wù)器的通信方法,事件套接字以及事件隊(duì)列的組合使用能夠做到高效、及時(shí)的處理服務(wù)器間以及服務(wù)器內(nèi)線程間的消息通信。
文檔編號(hào)H04L29/06GK103078909SQ20121057856
公開日2013年5月1日 申請(qǐng)日期2012年12月27日 優(yōu)先權(quán)日2012年12月27日
發(fā)明者劉德建, 陳宏展, 王飛云, 華曉明 申請(qǐng)人:福建天晴數(shù)碼有限公司