本發明涉及互聯網技術及游戲領域,特別涉及一種游戲用戶管理方法、游戲服務器及系統。
背景技術:
隨著互聯網技術的不斷發展,越來越多的游戲公司將目光從鎖定在網游市場,開發一款熱門的網絡游戲成為了很多游戲公司的首要目標。而在搭建網絡游戲系統時,通常是通過客戶端-服務器的形式來實現的。當用戶打開游戲客戶端中安裝的游戲軟件進入游戲時,相當于登錄了游戲服務器,此時游戲服務器即會為用戶創建相關進程,在用戶玩游戲的過程中,游戲客戶端與游戲服務器之間持續存在交互行為,如發送請求、傳遞數據等,以保持數據的實時性,而這些與用戶關聯的交互行為會被上述進程加以記錄。
就目前的游戲用戶管理系統而言,當用戶進入游戲并登錄到對應的游戲服務器后,游戲服務器為用戶創建一個進程,此后該進程直到用戶退出游戲都一直存在,而一旦用戶退出游戲則隨即刪除該進程。一般情況下,游戲客戶端與游戲服務器之間的數據傳送均是主動進行的,即游戲客戶端可主動向游戲服務器發送數據,游戲服務器也可以非依游戲客戶端請求,主動向游戲客戶端推送消息,如活動通知、好友郵件等。然而,過多的數據頻繁交互會給游戲服務器以及游戲客戶端帶來額外的負擔,且當用戶在非wi-fi環境下玩游戲時,網絡中大量傳輸的數據量會造成數據流量的過多消耗。
技術實現要素:
為此,本發明提供一種游戲用戶管理方案,以力圖解決或者至少緩解上面存在的問題。
根據本發明的一個方面,提供一種游戲用戶管理方法,適于在游戲用戶管理系統所分配的游戲服務器中執行,游戲用戶管理系統包括多個游戲服務器及數據庫服務器,每個游戲服務器分別與多個游戲客戶端及數據庫服務器通信連接,數據庫服務器中存儲有多個用戶初始信息,用戶初始信息分別對應于不同的游戲用戶,該方法包括如下步驟:接收游戲客戶端發送的登錄請求,登錄請求包括登錄驗證信息;根據登錄驗證信息進行登錄驗證,若驗證成功,則獲取上次退出信息,根據上次退出信息判斷上次退出游戲時是否存在異常情形;若上次退出游戲時不存在異常情形,則直接創建與游戲客戶端對應的游戲用戶關聯的虛擬進程,虛擬進程中包括消息隊列,消息隊列適于存儲游戲服務器生成的消息;從數據庫服務器獲取與游戲用戶關聯的用戶初始信息作為用戶當前信息,將用戶當前信息發送至游戲客戶端;接收并處理游戲客戶端上報的操作數據,以生成對應的消息;根據消息更新用戶當前信息,并將消息推送至消息隊列;響應操作數據的上報,將消息隊列中的所有消息發送給游戲客戶端。
可選地,在根據本發明的游戲用戶管理方法中,還包括:接收游戲客戶端發送的退出請求,退出請求包括狀態標識,狀態標識用于標記本次退出游戲時是否存在異常情形將用戶當前信息回寫到數據庫服務器,以更新對應的用戶初始信息;若本次退出游戲時不存在異常情形,則直接刪除虛擬進程;若本次退出游戲時存在異常情形,則將虛擬進程保留第一時間閾值后再進行刪除。
可選地,在根據本發明的游戲用戶管理方法中,登錄驗證信息包括登錄請求時間和游戲用戶標識,上次退出信息包括上次退出時間、上次退出游戲時的狀態標識和上次登錄游戲時連接的游戲服務器對應的服務器標識,該方法還包括:若上次退出游戲時的狀態標識表明存在異常情形,則判斷登錄請求時間與上次退出時間的時間間隔是否大于第一時間閾值;若時間間隔不大于第一時間閾值,則通過服務器標識查找到上次登錄游戲時分配的游戲服務器,獲取該游戲服務器中與游戲用戶標識關聯的最新的用戶當前信息,刪除該游戲服務器保留的與游戲用戶標識對應的虛擬進程,并基于該用戶當前信息在當前分配的游戲服務器中重新創建關聯的虛擬進程。
可選地,在根據本發明的游戲用戶管理方法中,還包括:若時間間隔大于第一時間閾值,則直接創建與游戲客戶端對應的游戲用戶關聯的虛擬進程。
可選地,在根據本發明的游戲用戶管理方法中,游戲服務器中存儲有游戲配置數據,接收并處理游戲客戶端上報的操作數據,以生成對應的消息的步驟包括:接收游戲客戶端上報的操作數據;根據游戲配置數據和用戶當前信息,對操作數據進行校驗;若校驗成功,則對操作數據進行處理,以生成對應的消息。
可選地,在根據本發明的游戲用戶管理方法中,操作數據包括道具使用信息、通關耗時、傷害量、生命值、攻擊強度、金幣數量和障礙物信息中至少一種。
可選地,在根據本發明的游戲用戶管理方法中,操作數據包括道具使用信息,道具使用信息包括道具標識和與其關聯的已使用道具數量,用戶當前信息包括道具標識和與其對應的剩余道具數量,游戲配置數據包括與道具標識關聯的道具使用數量上限值,根據游戲配置數據和用戶當前信息,對操作數據進行校驗的步驟包括:對每一個道具,根據其道具標識獲取該道具的已使用道具數量、剩余道具數量和道具使用數量上限值;判斷已使用道具數量是否滿足小于道具使用數量上限值、且小于剩余道具數量的條件;若滿足條件,則判斷校驗成功,否則判斷校驗失敗。
可選地,在根據本發明的游戲用戶管理方法中,對操作數據進行處理,以生成對應的消息的步驟包括:對每一個道具,計算該道具的剩余道具數量與已使用道具數量的差值;將剩余道具數量的值更新為該差值以作為對應的消息。
可選地,在根據本發明的游戲用戶管理方法中,還包括:響應游戲客戶端發送的心跳信息,將消息隊列中的所有消息發送至游戲客戶端。
根據本發明的又一個方面,提供一種游戲服務器,適于響應游戲用戶管理系統的分配與對應的游戲客戶端進行數據交互,游戲用戶管理系統包括多個游戲服務器及數據庫服務器,每個游戲服務器分別與多個游戲客戶端及數據庫服務器通信連接,數據庫服務器中存儲有多個用戶初始信息,用戶初始信息分別對應于不同的游戲用戶,游戲服務器包括接收模塊、驗證模塊、判斷模塊、進程管理模塊、獲取模塊、生成模塊、更新模塊和相應模塊。其中,接收模塊適于接收游戲客戶端發送的登錄請求,登錄請求包括登錄驗證信息;驗證模塊適于根據登錄驗證信息進行登錄驗證;判斷模塊適于當驗證成功時,獲取上次退出信息,根據上次退出信息判斷上次退出游戲時是否存在異常情形;進程管理模塊適于當上次退出游戲時不存在異常情形時,直接創建與游戲客戶端對應的游戲用戶關聯的虛擬進程,虛擬進程中包括消息隊列,消息隊列適于存儲游戲服務器生成的消息;獲取模塊適于從數據庫服務器獲取與游戲用戶關聯的用戶初始信息作為用戶當前信息,將用戶當前信息發送至游戲客戶端;生成模塊適于接收并處理游戲客戶端上報的操作數據,以生成對應的消息;更新模塊適于根據消息更新用戶當前信息,并將消息推送至消息隊列;響應模塊適于響應操作數據的上報,將消息隊列中的所有消息發送給游戲客戶端。
可選地,在根據本發明的游戲服務器中,接收模塊還適于接收游戲客戶端發送的退出請求,退出請求包括狀態標識,狀態標識用于標記本次退出游戲時是否存在異常情形;進程管理模塊還適于,將用戶當前信息回寫到數據庫服務器,以更新對應的用戶初始信息當本次退出游戲時不存在異常情形時,直接刪除虛擬進程,當本次退出游戲時存在異常情形時,將虛擬進程保留第一時間閾值后再進行刪除。
可選地,在根據本發明的游戲服務器中,登錄驗證信息包括登錄請求時間和游戲用戶標識,上次退出信息包括上次退出時間、上次退出游戲時的狀態標識和上次登錄游戲時連接的游戲服務器對應的服務器標識,判斷模塊還適于當上次退出游戲時的狀態標識表明存在異常情形時,判斷登錄請求時間與上次退出時間的時間間隔是否大于第一時間閾值;進程管理模塊還適于當時間間隔不大于第一時間閾值時,通過服務器標識查找到上次登錄游戲時分配的游戲服務器,獲取該游戲服務器中與游戲用戶標識關聯的最新的用戶當前信息,刪除該游戲服務器保留的與游戲用戶標識對應的虛擬進程,并基于該用戶當前信息在當前分配的游戲服務器中重新創建關聯的虛擬進程。
可選地,在根據本發明的游戲服務器中,進程管理模塊還適于:當時間間隔大于第一時間閾值時,直接創建與游戲客戶端對應的游戲用戶關聯的虛擬進程。
可選地,在根據本發明的游戲服務器中,游戲服務器中存儲有游戲配置數據,生成模塊進一步適于:接收游戲客戶端上報的操作數據;根據游戲配置數據和用戶當前信息,對操作數據進行校驗;當校驗成功時,對操作數據進行處理,以生成對應的消息。
可選地,在根據本發明的游戲服務器中,操作數據包括道具使用信息、通關耗時、傷害量、生命值、攻擊強度、金幣數量和障礙物信息中至少一種。
可選地,在根據本發明的游戲服務器中,操作數據包括道具使用信息,道具使用信息包括道具標識和與其關聯的已使用道具數量,用戶當前信息包括道具標識和與其對應的剩余道具數量,游戲配置數據包括與道具標識關聯的道具使用數量上限值,生成模塊進一步適于:對每一個道具,根據其道具標識獲取該道具的已使用道具數量、剩余道具數量和道具使用數量上限值;判斷已使用道具數量是否滿足小于道具使用數量上限值、且小于剩余道具數量的條件;當滿足條件時,判斷校驗成功,否則判斷校驗失敗。
可選地,在根據本發明的游戲服務器中,生成模塊進一步適于:對每一個道具,計算該道具的剩余道具數量與已使用道具數量的差值;將剩余道具數量的值更新為該差值以作為對應的消息。
可選地,在根據本發明的游戲服務器中,響應模塊還適于:響應游戲客戶端發送的心跳信息,將消息隊列中的所有消息發送至游戲客戶端。
根據本發明的又一個方面,還提供一種游戲用戶管理系統,包括根據本發明的多個游戲服務器及數據庫服務器。
根據本發明的游戲用戶管理的技術方案,當游戲用戶在游戲客戶端登錄游戲時,游戲用戶系統向該游戲用戶分配的游戲服務器接收游戲客戶端發送的登錄請求,并創建與該游戲用戶關聯的虛擬進程,虛擬進程中包括消息隊列,隨后從數據庫服務器獲取與游戲用戶關聯的用戶初始信息作為用戶當前信息,將用戶當前信息發送至游戲客戶端,在游戲用戶保持游戲狀態的過程中,游戲服務器接收并處理游戲客戶端上報的操作數據,以生成對應的消息,根據消息更新用戶當前信息,并將消息推送至消息隊列,響應操作數據的上報,將消息隊列中的所有消息發送給游戲客戶端。在上述技術方案中,在創建虛擬進程前,會先對登錄請求中的登錄驗證信息進行驗證,若驗證成功則判斷該游戲用戶上次退出游戲時是否存在異常情形,當不存在異常情形時才直接創建與該游戲用戶關聯的虛擬進程,否則先根據異常情形進行相應的處理,比如保存最新的用戶當前信息,再基于該用戶當前信息創建虛擬進程,從而避免如掉線、卡機等異常情形導致游戲用戶意外退出游戲而丟失游戲進度的問題,大幅度提升了用戶體驗。同時,在對操作數據進行處理時,會根據游戲配置數據和用戶當前信息來校驗操作數據,若校驗成功才會執行下一步處理以生成對應的消息,降低了游戲作弊的可能性,打擊了外掛行為。由于只有當游戲客戶端向游戲服務器上報操作數據時,游戲服務器才進行響應將消息隊列中的所有消息發送給游戲客戶端,使得兩者的數據交互行為大量減少,降低網絡連接中傳輸的數據量。此外,為防止游戲客戶端長時間不上報操作數據的問題,在游戲客戶端設置一定頻率的心跳信息來觸發游戲服務器自動下發消息,達到獲取推送消息的目的。
附圖說明
為了實現上述以及相關目的,本文結合下面的描述和附圖來描述某些說明性方面,這些方面指示了可以實踐本文所公開的原理的各種方式,并且所有方面及其等效方面旨在落入所要求保護的主題的范圍內。通過結合附圖閱讀下面的詳細描述,本公開的上述以及其它目的、特征和優勢將變得更加明顯。遍及本公開,相同的附圖標記通常指代相同的部件或元素。
圖1示出了根據本發明的一個實施例的游戲用戶管理系統100的示意圖;
圖2示出了根據本發明一個實施例的游戲用戶管理方法200的流程圖;以及
圖3示出了根據本發明一個實施例的游戲服務器300的示意圖。
具體實施方式
下面將參照附圖更詳細地描述本公開的示例性實施例。雖然附圖中顯示了本公開的示例性實施例,然而應當理解,可以以各種形式實現本公開而不應被這里闡述的實施例所限制。相反,提供這些實施例是為了能夠更透徹地理解本公開,并且能夠將本公開的范圍完整的傳達給本領域的技術人員。
圖1示出了根據本發明一個實施例的游戲用戶管理系統100的示意圖。如圖1所示,游戲用戶管理系統100包括游戲服務器300、游戲服務器400和數據庫服務器500,游戲服務器300和游戲服務器400均與數據庫服務器500通信連接,數據庫服務器500中存儲有多個用戶初始信息,每個用戶初始信息分別對應于不同的游戲用戶,需要說明的是游戲服務器和數據庫服務器的數量并無限制。在圖1中,與游戲服務器300通信連接的還有游戲客戶端610和游戲客戶端620,與游戲服務器400通信連接的還有游戲客戶端630和游戲客戶端640,游戲客戶端610~640可實現為移動終端,如智能手機、平板電腦等,也可實現為計算設備,如pc機等,但均不限于此,數量上也未作任何限制。
根據本發明的一個實施例,游戲服務器300通過通信網絡分別與數據庫服務器500、游戲客戶端610和游戲客戶端620交換數據信息,而游戲服務器400則是通過通信網絡分別與數據庫服務器500、游戲客戶端630和游戲客戶端640交換數據信息,以下將以游戲服務器300與數據庫服務器500及游戲客戶端610之間的交互為例進行說明。具體來說,當游戲用戶登錄安裝于游戲客戶端610中的游戲應用時,游戲用戶管理系統100會向該游戲用戶分配一個游戲服務器,即如圖1所示的游戲服務器300,此時游戲服務器300接收游戲客戶端610發送的登錄請求,根據該登錄請求來創建與游戲客戶端610對應的該游戲用戶關聯的虛擬進程,虛擬進程中包括消息隊列,游戲服務器300從數據庫服務器500獲取與該游戲用戶關聯的用戶初始信息作為用戶當前信息,將該用戶當前信息發送至游戲客戶端610。游戲客戶端610接收到用戶當前信息后,將游戲中的用戶數據進行初始化更新,并開始收集游戲用戶的操作行為所對應的操作數據,將操作數據上報至游戲服務器300。游戲服務器300接收并處理游戲客戶端610上報的操作數據,以生成對應的消息,根據消息更新用戶當前信息,并將消息推送至消息隊列,再響應操作數據的上報,將消息隊列中的所有消息發送給游戲客戶端610。
圖2示出了根據本發明一個實施例的游戲用戶管理方法200的流程圖。游戲用戶管理方法200適于在游戲服務器(例如圖1所示的游戲服務器300)中執行。
如圖2所示,方法200始于步驟s20。在步驟s210中,接收游戲客戶端610發送的登錄請求,登錄請求包括登錄驗證信息。游戲服務器300在接收到上述登錄請求后,執行步驟s220,根據登錄驗證信息進行登錄驗證,若驗證成功,則獲取上次退出信息,根據上次退出信息判斷上次退出游戲時是否存在異常情形。其中,登錄驗證信息包括登錄請求時間和游戲用戶標識,上次退出信息包括上次退出時間、上次退出游戲時的狀態標識和上次登錄游戲時連接的游戲服務器對應的服務器標識。上次退出游戲時的狀態標識適于表明是否游戲用戶在上次退出游戲時,其退出狀態是正常退出還是存在異常情形,如果該狀態標識為true,則說明游戲用戶是正常退出游戲,如果該狀態標識為false,則說明游戲用戶退出游戲存在異常情形。需要說明的是,上次退出信息是與游戲客戶端610中當前登錄的游戲用戶關聯的,其可以是由游戲用戶上次退出游戲時所連接的服務器保存,也可以由數據庫服務器500保存,當然,還可以由游戲客戶端610本地保存,若由游戲客戶端610保存,則登錄請求包括登錄驗證信息和上次退出信息。
根據本發明的一個實施例,登錄請求時間為2017年3月22日17時35分22秒,游戲用戶標識為user1,上次退出時間為2017年3月21日11時13分39秒,上次退出游戲時的狀態標識為true,上次登錄游戲時連接的游戲服務器對應的服務器標識為server1。由狀態標識為true可知,游戲用戶上次退出游戲時是正常退出,不存在異常情形。
若上次退出游戲時不存在異常情形,則進入步驟s230,直接創建與游戲客戶端610對應的游戲用戶關聯的虛擬進程,虛擬進程中包括消息隊列,消息隊列適于存儲游戲服務器300生成的消息。根據本發明的一個實施例,由于上次退出游戲時的狀態標識為true,則游戲服務器300直接創建與游戲客戶端610對應的游戲用戶關聯的虛擬進程pro1,虛擬進程pro1中包括消息隊列,消息隊列適于存儲游戲服務器300生成的消息。在該實施方式中,虛擬進程pro1是erlang虛擬機級別的,可以通過spawn函數創建,創建時間是微秒級別,初始占用內存2kb左右。實際上,對每一個游戲用戶而言,在其登錄游戲并通過登錄驗證后,會根據相應的處理來為其創建一個包含該游戲用戶所有操作行為的狀態機虛擬進程,用于處理其所有操作行為,比如簽到、戰斗等。此虛擬進程的生命周期一般是從游戲用戶登錄游戲到退出游戲,在游戲用戶的游戲過程中不斷接收由游戲客戶端發來的操作數據,并進行處理以生成對應的消息,實時進行狀態的切換,返回消息給游戲客戶端,可以說游戲客戶端所展示的內容就是游戲用戶的虛擬進程中數據和狀態的反射。以上創建虛擬進程的相關代碼如下所示:
handle({#user_login_c2s{openid=openid,openkey=openkey,serverid=serverid,mac=macaddress,
pf=pf,audlt=isaudlt,client_version=clientversion,hardware=hardware,
telecom=telecom,network=network,regchannel=regchannel,
pay_pf=paypf,pay_pfkey=paypfkey,pay_token=paytoken,name=name,
activation_code=activationcode,icon_url=iconurl,login_source=loginsource,
gender=gender,refresh_token=refreshtoken},ipstr,cookievalue})->
player_login_op:http_proc_user_login_c2s({openid,openkey,serverid,macaddress,pf,isaudlt,clientversion,
hardware,telecom,network,regchannel,paypf,paypfkey,paytoken,
name,activationcode,iconurl,loginsource,gender,refreshtoken},ipstr,cookievalue);
childspec={roleid,{role_processor,start_link,[roledb,roleid]},temporary,
2000,worker,[role_processor]},supervisor:start_child({?module,node},childspec).
以上對上次退出游戲時不存在異常情形而創建虛擬進程的情況進行了說明,那么若上次退出游戲時的狀態標識表明存在異常情形,則關于創建虛擬進程的過程是有所不同的。根據本發明的又一個實施例,若上次退出游戲時的狀態標識表明存在異常情形,則判斷登錄請求時間與上次退出時間的時間間隔是否大于第一時間閾值,若時間間隔不大于第一時間閾值,則通過服務器標識查找到上次登錄游戲時分配的游戲服務器,獲取該游戲服務器中與游戲用戶標識關聯的最新的用戶當前信息,刪除該游戲服務器保留的與游戲用戶標識對應的虛擬進程,并基于該用戶當前信息在當前分配的游戲服務器中重新創建關聯的虛擬進程,若時間間隔大于第一時間閾值,則直接創建與游戲客戶端對應的游戲用戶關聯的虛擬進程。
在該實施方式中,登錄請求時間為2017年4月12日9時30分12秒,游戲用戶標識為user1,上次退出時間為2017年4月12日9時28分55秒,上次退出游戲時的狀態標識為false,上次登錄游戲時連接的游戲服務器對應的服務器標識為server2,第一時間閾值優選為5分鐘。由狀態標識為false可知,游戲用戶上次退出游戲時是非正常退出,存在異常情形,則判斷登錄請求時間與上次退出時間的時間間隔是否大于第一時間閾值。此時,該時間間隔為1分17秒,不大于第一時間閾值,則通過服務器標識server2查找到上次登錄游戲時分配的游戲服務器為游戲服務器400,獲取游戲服務器400中與游戲用戶標識user2關聯的最新的用戶當前信息,刪除游戲服務器400保留的與游戲用戶標識user2對應的虛擬進程pro0,并基于該用戶當前信息在當前分配的游戲服務器300中重新創建關聯的虛擬進程pro2。
接下來,執行步驟s240,從數據庫服務器500獲取與游戲用戶關聯的用戶初始信息作為用戶當前信息,將用戶當前信息發送至游戲客戶端610。根據本發明的一個實施例,用戶初始信息一般包括游戲用戶的基礎信息和游戲系統信息,游戲用戶的基礎信息是可以反映出游戲用戶自身水平的數據,包括如在游戲中的用戶信息界面上顯示的內容,比如游戲用戶名稱、頭像、性別、金幣數量、道具數量、等級和經驗值等,而游戲系統信息則是與游戲系統自身相關的如游戲簽到系統數據、游戲好友系統數據等數據。從數據庫服務器500中獲取到與游戲用戶標識為user1的游戲用戶關聯的用戶初始信息,將該用戶初始信息作為用戶當前信息并發送至游戲客戶端610,以便游戲客戶端610根據該用戶當前信息更新本地數據并向游戲用戶展示。
在步驟s250中,接收并處理游戲客戶端610上報的操作數據,以生成對應的消息。根據本發明的一個實施例,游戲服務器中存儲有游戲配置數據,消息的生成可通過以下方式來實現。首先,接收游戲客戶端上報的操作數據,操作數據包括道具使用信息、通關耗時、傷害量、生命值、攻擊強度、金幣數量和障礙物信息中至少一種,然后,根據游戲配置數據和用戶當前信息,對操作數據進行校驗,若校驗成功,則對操作數據進行處理,以生成對應的消息。在該實施方式中,游戲配置數據是預先配置好的、可用于對操作數據中具有數值上限的數據進行限制的數據,比如操作數據包括道具使用信息,道具使用信息包括道具標識和與其關聯的已使用道具數量,則對應的游戲配置數據包括與道具標識關聯的道具使用數量上限值,此時用戶當前信息包括道具標識和與其對應的剩余道具數量。
進而,在上述情況下,可通過下列方式對操作數據進行校驗。對每一個道具,根據其道具標識獲取該道具的已使用道具數量、剩余道具數量和道具使用數量上限值,判斷已使用道具數量是否滿足小于道具使用數量上限值、且小于剩余道具數量的條件,若滿足該條件,則判斷校驗成功,否則判斷校驗失敗。在該實施方式中,共計有3種不同的道具,道具標識依次為d1、d2和d3,將各道具分別記為道具d1、道具d2和道具d3,道具d1的已使用道具數量為2,剩余道具數量為3,道具使用數量上限值為3,道具d2的已使用道具數量為0,剩余道具數量為1,道具使用數量上限值為1,道具d3的已使用道具數量為1,剩余道具數量為4,道具使用數量上限值為2。對道具d1、d2和d3而言,其已使用道具數量均滿足小于道具使用數量上限值、且小于剩余道具數量的條件,因此判斷校驗成功。
在對游戲客戶端610上報的操作數據完成校驗后,繼續對其進行處理以生成對應的消息。根據上述實施例,對每一個道具,計算該道具的剩余道具數量與已使用道具數量的差值,將剩余道具數量的值更新為該差值以作為對應的消息。那么,道具d1的剩余道具數量的值應更新為3-2=1,道具d2的剩余道具數量的值應更新為1-0=1,道具d3的剩余道具數量的值應更新為4-1=3,將各道具的新的剩余道具數量與道具標識關聯起來以生成與道具相關的消息。
需要說明的是,由于不同的游戲系統的玩法設置和運行規則均有所不同,則在上述對操作數據進行校驗的過程中,校驗規則的制定也是千差萬別的,不僅與游戲系統自身及上報的具體的操作數據相關,還會涉及到各方面因素的考慮來進行校驗規則的更改,在本發明中對于校驗規則的設定不進行限制,根據不同的游戲系統進行適應性調整即可。此外,對于虛擬進程而言,當其進入游戲狀態后,自身也會相應運轉,如果觸發了一些時效性的功能,比如游戲活動刷新、體力回復等,虛擬進程還會自行產生消息來推送到消息隊列。
在消息生成后,執行步驟s260,根據消息更新用戶當前信息,并將消息推送至消息隊列。根據本發明的一個實施例,生成的消息是與道具相關的,具體為更新剩余道具數量的消息,則對于游戲用戶標識為user1的游戲用戶的用戶當前信息,其中道具d1的剩余道具數量的值更新為1,道具d2的剩余道具數量的值更新為1,道具d3的剩余道具數量的值更新為3,至此完成了用戶當前信息的更新,隨后將上述消息推送至消息隊列。
接下來,進入步驟s270,響應操作數據的上報,將消息隊列中的所有消息發送給游戲客戶端610。根據本發明的一個實施例,將消息隊列中包括以上與道具相關的消息在內的所有消息,均發送給游戲客戶端610,以便其更新本地數據??紤]到游戲客戶端610可能會存在長時間不上報操作數據的情況,為避免數據更新不及時,根據本發明的一個實施例,在游戲客戶端610中設置預定時間間隔的心跳來觸發游戲服務器300下發消息,則游戲客戶端300響應游戲客戶端610發送的心跳信息,將消息隊列中的所有消息發送至游戲客戶端610。在該實施方式中,預定時間間隔優選為180秒。消息推送過程的相關代碼如下所示:
//push消息
push_msg(pushmsg)->
put(?dict_push_msg_list,[pushmsg|get(?dict_push_msg_list)]).
//get消息
get_push_msg_list()->
msglist=get(?dict_push_msg_list),
reinit(),
lists:reverse(msglist).
//發送組合消息
encode_msg_list(msglist)->
lists:foldl(fun(msg,acc)->
bsize=size(msg),
<<acc/binary,bsize:16/unsigned,msg/binary>>
end,<<>>,msglist).
當游戲用戶退出當前游戲時,游戲客戶端610會向游戲服務器300發送退出請求,此時游戲服務器300接收游戲客戶端610發送的退出請求,退出請求包括狀態標識,狀態標識用于標記本次退出游戲時是否存在異常情形,并將用戶當前信息回寫到數據庫服務器500,以更新對應的用戶初始信息。若本次退出游戲時不存在異常情形,則直接刪除虛擬進程,若本次退出游戲時存在異常情形,則將虛擬進程保留第一時間閾值后再進行刪除。在游戲用戶退出游戲時,通過狀態標識來標記是否異常退出,對于異常退出的游戲用戶,保留其關聯的虛擬進程,以便游戲用戶在第一時間閾值內再次登錄游戲時,不會失去原本的游戲數據。
圖3示出了本發明一個實施例的游戲服務器300的示意圖。如圖3所示,游戲服務器300包括接收模塊310、驗證模塊320、判斷模塊330、進程管理模塊340、獲取模塊350、生成模塊360、更新模塊370和響應模塊380。
接收模塊310適于接收游戲客戶端610發送的登錄請求,登錄請求包括登錄驗證信息。接收模塊310還適于接收游戲客戶端610發送的退出請求,退出請求包括狀態標識,狀態標識用于標記本次退出游戲時是否存在異常情形。
驗證模塊320與接收模塊310相連,適于根據登錄驗證信息進行登錄驗證。
判斷模塊330分別與接收模塊310和驗證模塊320相連,適于當驗證成功時,獲取上次退出信息,根據上次退出信息判斷上次退出游戲時是否存在異常情形。登錄驗證信息包括登錄請求時間和游戲用戶標識,上次退出信息包括上次退出時間、上次退出游戲時的狀態標識和上次登錄游戲時連接的游戲服務器對應的服務器標識,判斷模塊330還適于當上次退出游戲時的狀態標識表明存在異常情形時,判斷登錄請求時間與上次退出時間的時間間隔是否大于第一時間閾值。
進程管理模塊340與判斷模塊330相連,適于當上次退出游戲時不存在異常情形時,直接創建與游戲客戶端610對應的游戲用戶關聯的虛擬進程,虛擬進程中包括消息隊列,消息隊列適于存儲游戲服務器300生成的消息。進程管理模塊340還適于將用戶當前信息回寫到數據庫服務器500,以更新對應的用戶初始信息,當本次退出游戲時不存在異常情形時,直接刪除虛擬進程,當本次退出游戲時存在異常情形時,將虛擬進程保留第一時間閾值后再進行刪除。登錄驗證信息包括登錄請求時間和游戲用戶標識,上次退出信息包括上次退出時間、上次退出游戲時的狀態標識和上次登錄游戲時連接的游戲服務器對應的服務器標識,進程管理模塊340還適于當時間間隔不大于第一時間閾值時,通過服務器標識查找到上次登錄游戲時分配的游戲服務器,獲取該游戲服務器中與游戲用戶標識關聯的最新的用戶當前信息,刪除該游戲服務器保留的與游戲用戶標識對應的虛擬進程,并基于該用戶當前信息在當前分配的游戲服務器300中重新創建關聯的虛擬進程。進程管理模塊340還適于當時間間隔大于第一時間閾值時,直接創建與游戲客戶端610對應的游戲用戶關聯的虛擬進程。
獲取模塊350與進程管理模塊340相連,適于從數據庫服務器500獲取與游戲用戶關聯的用戶初始信息作為用戶當前信息,將用戶當前信息發送至游戲客戶端610。
生成模塊360與進程管理模塊340相連,適于接收并處理游戲客戶端610上報的操作數據,以生成對應的消息。游戲服務器300中存儲有游戲配置數據,生成模塊360進一步適于接收游戲客戶端610上報的操作數據;根據游戲配置數據和用戶當前信息,對操作數據進行校驗;當校驗成功時,對操作數據進行處理,以生成對應的消息。其中,操作數據包括道具使用信息、通關耗時、傷害量、生命值、攻擊強度、金幣數量和障礙物信息中至少一種。操作數據包括道具使用信息,道具使用信息包括道具標識和與其關聯的已使用道具數量,用戶當前信息包括道具標識和與其對應的剩余道具數量,游戲配置數據包括與道具標識關聯的道具使用數量上限值,生成模塊360進一步適于對每一個道具,根據其道具標識獲取該道具的已使用道具數量、剩余道具數量和道具使用數量上限值;判斷已使用道具數量是否滿足小于道具使用數量上限值、且小于剩余道具數量的條件;當滿足條件時,判斷校驗成功,否則判斷校驗失敗。生成模塊360進一步適于對每一個道具,計算該道具的剩余道具數量與已使用道具數量的差值;將剩余道具數量的值更新為該差值以作為對應的消息。
更新模塊370與生成模塊360相連,適于根據消息更新用戶當前信息,并將消息推送至消息隊列。
響應模塊380與更新模塊370相連,適于響應操作數據的上報,將消息隊列中的所有消息發送給游戲客戶端610。響應模塊380還適于響應游戲客戶端610發送的心跳信息,將消息隊列中的所有消息發送至游戲客戶端610。
關于游戲用戶管理的具體步驟以及實施例,在基于圖2的描述中已經詳細公開,此處不再贅述。
現有的游戲用戶管理方案中,游戲服務器為游戲用戶創建的游戲進程在用戶退出游戲時即刻刪除,且游戲客戶端與游戲服務器之間的數據傳送均是主動進行的,過多的數據頻繁交互會給游戲服務器以及游戲客戶端帶來額外的負擔,且當用戶在非wi-fi環境下玩游戲時,網絡中大量傳輸的數據量會造成數據流量的過多消耗。根據本發明實施例的游戲用戶管理的技術方案,當游戲用戶在游戲客戶端登錄游戲時,游戲用戶系統向該游戲用戶分配的游戲服務器接收游戲客戶端發送的登錄請求,并創建與該游戲用戶關聯的虛擬進程,虛擬進程中包括消息隊列,隨后從數據庫服務器獲取與游戲用戶關聯的用戶初始信息作為用戶當前信息,將用戶當前信息發送至游戲客戶端,在游戲用戶保持游戲狀態的過程中,游戲服務器接收并處理游戲客戶端上報的操作數據,以生成對應的消息,根據消息更新用戶當前信息,并將消息推送至消息隊列,響應操作數據的上報,將消息隊列中的所有消息發送給游戲客戶端。在上述技術方案中,在創建虛擬進程前,會先對登錄請求中的登錄驗證信息進行驗證,若驗證成功則判斷該游戲用戶上次退出游戲時是否存在異常情形,當不存在異常情形時才直接創建與該游戲用戶關聯的虛擬進程,否則先根據異常情形進行相應的處理,比如保存最新的用戶當前信息,再基于該用戶當前信息創建虛擬進程,從而避免如掉線、卡機等異常情形導致游戲用戶意外退出游戲而丟失游戲進度的問題,大幅度提升了用戶體驗。同時,在對操作數據進行處理時,會根據游戲配置數據和用戶當前信息來校驗操作數據,若校驗成功才會執行下一步處理以生成對應的消息,降低了游戲作弊的可能性,打擊了外掛行為。由于只有當游戲客戶端向游戲服務器上報操作數據時,游戲服務器才進行響應將消息隊列中的所有消息發送給游戲客戶端,使得兩者的數據交互行為大量減少,降低網絡連接中傳輸的數據量。此外,為防止游戲客戶端長時間不上報操作數據的問題,在游戲客戶端設置一定頻率的心跳信息來觸發游戲服務器自動下發消息,達到獲取推送消息的目的。
a9.如a1-8中任一項所述的方法,還包括:
響應所述游戲客戶端發送的心跳信息,將所述消息隊列中的所有消息發送至所述游戲客戶端。
b11.如b10所述的游戲服務器,其中:
所述接收模塊還適于,接收游戲客戶端發送的退出請求,所述退出請求包括狀態標識,所述狀態標識用于標記本次退出游戲時是否存在異常情形;
所述進程管理模塊還適于,將所述用戶當前信息回寫到數據庫服務器,以更新對應的用戶初始信息,當本次退出游戲時不存在異常情形時,直接刪除所述虛擬進程,當本次退出游戲時存在異常情形時,將所述虛擬進程保留第一時間閾值后再進行刪除。
b12.如b10或11所述的游戲服務器,登錄驗證信息包括登錄請求時間和游戲用戶標識,上次退出信息包括上次退出時間、上次退出游戲時的狀態標識和上次登錄游戲時連接的游戲服務器對應的服務器標識,其中:
所述判斷模塊還適于,當上次退出游戲時的狀態標識表明存在異常情形時,判斷所述登錄請求時間與所述上次退出時間的時間間隔是否大于第一時間閾值;
所述進程管理模塊還適于,當所述時間間隔不大于第一時間閾值時,通過所述服務器標識查找到上次登錄游戲時分配的游戲服務器,獲取該游戲服務器中與所述游戲用戶標識關聯的最新的用戶當前信息,刪除該游戲服務器保留的與所述游戲用戶標識對應的虛擬進程,并基于該用戶當前信息在當前分配的游戲服務器中重新創建關聯的虛擬進程。
b13.如b12所述的游戲服務器,所述進程管理模塊還適于:
當所述時間間隔大于第一時間閾值時,直接創建與所述游戲客戶端對應的游戲用戶關聯的虛擬進程。
b14.如b10-13中任一項所述的游戲服務器,所述游戲服務器中存儲有游戲配置數據,所述生成模塊進一步適于:
接收所述游戲客戶端上報的操作數據;
根據所述游戲配置數據和所述用戶當前信息,對所述操作數據進行校驗;
當校驗成功時,對所述操作數據進行處理,以生成對應的消息。
b15.如b10-14中任一項所述的游戲服務器,所述操作數據包括道具使用信息、通關耗時、傷害量、生命值、攻擊強度、金幣數量和障礙物信息中至少一種。
b16.如b10-15中任一項所述的游戲服務器,所述操作數據包括道具使用信息,所述道具使用信息包括道具標識和與其關聯的已使用道具數量,所述用戶當前信息包括道具標識和與其對應的剩余道具數量,所述游戲配置數據包括與道具標識關聯的道具使用數量上限值,所述生成模塊進一步適于:
對每一個道具,根據其道具標識獲取該道具的已使用道具數量、剩余道具數量和道具使用數量上限值;
判斷所述已使用道具數量是否滿足小于所述道具使用數量上限值、且小于所述剩余道具數量的條件;
當滿足所述條件時,判斷校驗成功,否則判斷校驗失敗。
b17.如b16所述的游戲服務器,所述生成模塊進一步適于:
對每一個道具,計算該道具的剩余道具數量與已使用道具數量的差值;
將所述剩余道具數量的值更新為該差值以作為對應的消息。
b18.如b10-17中任一項所述的游戲服務器,所述響應模塊還適于:
響應所述游戲客戶端發送的心跳信息,將所述消息隊列中的所有消息發送至所述游戲客戶端。在此處所提供的說明書中,說明了大量具體細節。然而,能夠理解,本發明的實施例可以在沒有這些具體細節的情況下被實踐。在一些實例中,并未詳細示出公知的方法、結構和技術,以便不模糊對本說明書的理解。
類似地,應當理解,為了精簡本公開并幫助理解各個發明方面中的一個或多個,在上面對本發明的示例性實施例的描述中,本發明的各個特征有時被一起分組到單個實施例、圖、或者對其的描述中。然而,并不應將該公開的方法解釋成反映如下意圖:即所要求保護的本發明要求比在每個權利要求中所明確記載的特征更多特征。更確切地說,如下面的權利要求書所反映的那樣,發明方面在于少于前面公開的單個實施例的所有特征。因此,遵循具體實施方式的權利要求書由此明確地并入該具體實施方式,其中每個權利要求本身都作為本發明的單獨實施例。
本領域那些技術人員應當理解在本文所公開的示例中的設備的模塊或單元或組件可以布置在如該實施例中所描述的設備中,或者可替換地可以定位在與該示例中的設備不同的一個或多個設備中。前述示例中的模塊可以組合為一個模塊或者此外可以分成多個子模塊。
本領域那些技術人員可以理解,可以對實施例中的設備中的模塊進行自適應性地改變并且把它們設置在與該實施例不同的一個或多個設備中??梢园褜嵤├械哪K或單元或組件組合成一個模塊或單元或組件,以及此外可以把它們分成多個子模塊或子單元或子組件。除了這樣的特征和/或過程或者單元中的至少一些是相互排斥之外,可以采用任何組合對本說明書(包括伴隨的權利要求、摘要和附圖)中公開的所有特征以及如此公開的任何方法或者設備的所有過程或單元進行組合。除非另外明確陳述,本說明書(包括伴隨的權利要求、摘要和附圖)中公開的每個特征可以由提供相同、等同或相似目的的替代特征來代替。
此外,本領域的技術人員能夠理解,盡管在此所述的一些實施例包括其它實施例中所包括的某些特征而不是其它特征,但是不同實施例的特征的組合意味著處于本發明的范圍之內并且形成不同的實施例。例如,在下面的權利要求書中,所要求保護的實施例的任意之一都可以以任意的組合方式來使用。
此外,所述實施例中的一些在此被描述成可以由計算機系統的處理器或者由執行所述功能的其它裝置實施的方法或方法元素的組合。因此,具有用于實施所述方法或方法元素的必要指令的處理器形成用于實施該方法或方法元素的裝置。此外,裝置實施例的在此所述的元素是如下裝置的例子:該裝置用于實施由為了實施該發明的目的的元素所執行的功能。
這里描述的各種技術可結合硬件或軟件,或者它們的組合一起實現。從而,本發明的方法和設備,或者本發明的方法和設備的某些方面或部分可采取嵌入有形媒介,例如軟盤、cd-rom、硬盤驅動器或者其它任意機器可讀的存儲介質中的程序代碼(即指令)的形式,其中當程序被載入諸如計算機之類的機器,并被所述機器執行時,所述機器變成實踐本發明的設備。
在程序代碼在可編程計算機上執行的情況下,計算設備一般包括處理器、處理器可讀的存儲介質(包括易失性和非易失性存儲器和/或存儲元件),至少一個輸入裝置,和至少一個輸出裝置。其中,存儲器被配置用于存儲程序代碼;處理器被配置用于根據該存儲器中存儲的所述程序代碼中的指令,執行本發明的游戲用戶管理方法。
以示例而非限制的方式,計算機可讀介質包括計算機存儲介質和通信介質。計算機可讀介質包括計算機存儲介質和通信介質。計算機存儲介質存儲諸如計算機可讀指令、數據結構、程序模塊或其它數據等信息。通信介質一般以諸如載波或其它傳輸機制等已調制數據信號來體現計算機可讀指令、數據結構、程序模塊或其它數據,并且包括任何信息傳遞介質。以上的任一種的組合也包括在計算機可讀介質的范圍之內。
如在此所使用的那樣,除非另行規定,使用序數詞“第一”、“第二”、“第三”等等來描述普通對象僅僅表示涉及類似對象的不同實例,并且并不意圖暗示這樣被描述的對象必須具有時間上、空間上、排序方面或者以任意其它方式的給定順序。
盡管根據有限數量的實施例描述了本發明,但是受益于上面的描述,本技術領域內的技術人員明白,在由此描述的本發明的范圍內,可以設想其它實施例。此外,應當注意,本說明書中使用的語言主要是為了可讀性和教導的目的而選擇的,而不是為了解釋或者限定本發明的主題而選擇的。因此,在不偏離所附權利要求書的范圍和精神的情況下,對于本技術領域的普通技術人員來說許多修改和變更都是顯而易見的。對于本發明的范圍,對本發明所做的公開是說明性的,而非限制性的,本發明的范圍由所附權利要求書限定。