本發明涉及計算機技術領域,尤其涉及一種信息處理方法、系統及計算機存儲介質。
背景技術:
現階段,隨著計算機和網絡技術的不斷發展,基于網頁的游戲方式也不斷發展,游戲玩家也不斷的增加,傳統的網頁游戲服務器架構難以滿足需求。
網頁游戲是基于瀏覽器的多人在線互動游戲,當游戲人數過多時,由于每個游戲用戶都要同時與服務器進行信息的交互,會導致服務器cpu和i/o資源消耗極大,同時信息量過載時還會產生傳輸時延,影響游戲用戶的體驗。因此,如何保證服務器的高性能以及游戲過程的實時性,是本領域技術人員亟需解決的問題。
技術實現要素:
本發明實施例提供一種信息處理方法、系統及計算機存儲介質,通過采用多個協程協同工作,能夠保證實時性和高性能需求。
本發明實施例第一方面提供了一種信息處理方法,應用于主協程、第一協程以及第二協程,所述主協程用于調度所述第一協程以及第二協程,所述方法包括:
第一協程執行獲取函數以訪問預設的任務隊列;
第二協程根據接收的指令生產任務,并將所述任務放入所述任務隊列;
所述第一協程從所述任務隊列中獲取任務,并處理所述任務。
可選的,所述方法還包括:
若所述任務隊列為空,則所述第一協程向所述主協程發送等待信息;
所述主協程在接收到所述等待信息之后,調度所述第二協程運行。
可選的,所述方法還包括:
在將所述任務放入所述任務隊列之后,所述第二協程根據所述任務隊列向所述主協程發送通知信息,所述通知信息用于標識所述任務隊列的變化;
所述主協程識別所述通知信息,并根據所述通知信息調度所述第一協程運行。
可選的,所述第一協程對應游戲服務器,所述第二協程對應游戲客戶端;或者所述第一協程對應游戲客戶端,所述第二協程對應游戲服務器。
可選的,所述任務隊列包括游戲客戶端請求的游戲邏輯。
本發明實施例第二方面提供了一種信息處理系統,包括:主協程、第一協程以及第二協程,其中,所述主協程用于調度所述第一協程以及第二協程;
所述第一協程用于執行獲取函數以訪問預設的任務隊列;
所述第二協程用于根據接收的指令生產任務,并將所述任務放入所述任務隊列;
所述第一協程還用于從所述任務隊列中獲取任務,并處理所述任務。
可選的,所述第一協程還用于當所述任務隊列為空時,向所述主協程發送等待信息;
所述主協程還用于在接收到所述等待信息之后,調度所述第二協程運行。
可選的,所述第二協程還用于在將所述任務放入所述任務隊列之后,根據所述任務隊列向所述主協程發送通知信息,所述通知信息用于標識所述任務隊列的變化;
所述主協程還用于識別所述通知信息,并根據所述通知信息調度所述第一協程運行。
可選的,所述第一協程對應游戲服務器,所述第二協程對應游戲客戶端;或者所述第一協程對應游戲客戶端,所述第二協程對應游戲服務器。
可選的,所述任務隊列包括游戲客戶端請求的游戲邏輯。
本發明實施例第三方面提供了一種信息處理系統,包括:存儲器、處理器以及存儲在所述存儲器上并可在所述處理器上運行的計算機程序,所述處理器執行所述計算機程序以實現:運行主協程、第一協程以及第二協程,其中,運行所述主協程用于調度所述第一協程以及第二協程,所述處理器用于:
運行所述第一協程以用于執行獲取函數以訪問預設的任務隊列;
運行所述第二協程以用于根據接收的指令生產任務,并將所述任務放入所述任務隊列;
運行所述第一協程以用于從所述任務隊列中獲取任務,并處理所述任務。
可選的,所述處理器還用于運行所述第一協程以用于當所述任務隊列為空時,向所述主協程發送等待信息;
運行所述主協程以用于在接收到所述等待信息之后,調度所述第二協程運行。
可選的,所述處理器還用于運行所述第二協程以在將所述任務放入所述任務隊列之后,根據所述任務隊列向所述主協程發送通知信息,所述通知信息用于標識所述任務隊列的變化;
運行所述主協程以用于識別所述通知信息,并根據所述通知信息調度所述第一協程運行。
可選的,所述第一協程對應游戲服務器,所述第二協程對應游戲客戶端;或者
所述第一協程對應游戲客戶端,所述第二協程對應游戲服務器。
可選的,所述任務隊列包括游戲客戶端請求的游戲邏輯。
本發明實施例第四方面提供了一種計算機存儲介質,所述計算機存儲介質可存儲有程序,所述程序執行時包括第一方面中所述信息處理方法的步驟。
實施本發明實施例,具有如下有益效果:
本發明實施例中,通過采用協程的架構,由主協程分別調度第一協程、第二協程運行,合理分配各個協程之間的資源,各協程之間獨立運行,無需加鎖,提高了運行效率,能夠保證信息處理的實時性以及高性能,提高服務器對客戶端的反應時間,降低時延,提升用戶體驗。
附圖說明
為了更清楚地說明本發明實施例中的技術方案,下面將對實施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖是本發明的一些實施例,對于本領域普通技術人員來講,在不付出創造性勞動的前提下,還可以根據這些附圖獲得其他的附圖。
圖1為本發明實施例提供的一種信息處理方法的實施環境圖。
圖2為本發明實施例提供的一種信息處理方法第一實施例的流程圖。
圖3為本發明實施例提供的一種信息處理方法第二實施例的流程圖。
圖4為本發明實施例提供的一種信息處理方法第三實施例的流程圖。
圖5為本發明實施例提供的一種信息處理系統第一實施例的結構示意圖。
圖6為本發明實施例提供的一種信息處理系統第二實施例的結構示意圖。
具體實施方式
下面將結合本發明實施例中的附圖,對本發明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發明一部分實施例,而不是全部的實施例。基于本發明中的實施例,本領域普通技術人員在沒有作出創造性勞動前提下所獲得的所有其他實施例,都屬于本發明保護的范圍。
本發明的說明書和權利要求書及上述附圖中的術語“第一”、“第二”和“第三”等是用于區別不同對象,而非用于描述特定順序。此外,術語“包括”以及它們任何變形,意圖在于覆蓋不排他的包含。例如包含了一系列步驟或單元的過程、方法、系統、產品或設備沒有限定于已列出的步驟或單元,而是可選地還包括沒有列出的步驟或單元,或可選地還包括對于這些過程、方法、產品或設備固有的其它步驟或單元。
圖1為本發明實施例提供的一種信息處理方法的實施環境圖。該信息處理方法應用于游戲系統,可選的,該游戲系統可以為網頁游戲、手機游戲等游戲形式,該游戲系統包括:服務端10以及客戶端20。所述服務端10包括數據庫服務器101、運維服務器102以及多個游戲服務器103,所述運維服務器102以及多個游戲服務器103與數據庫服務器101通信連接,所述運維服務器102用于提供運維功能,所述多個游戲服務器103用于提供各種游戲功能,比如:用戶登錄、用戶聊天、游戲主城區域、競技場區域以及副本等。客戶端20可以有多種形式,比如可以是用戶通過電腦瀏覽器以web形式登錄的網頁游戲,也可以是用戶使用手機下載app登錄的手機游戲,還可以是通過電腦下載應用程序登錄的網絡游戲等,本發明實施例并不以此為限??蛻舳?0通過訪問服務器10,實現相應的數據交互,獲取游戲數據,并交互控制信息或者其他信息。
可選的,在其他實施方式中,所述游戲系統還可以包括運營系統,所述運營系統可包括游戲網站以及游戲賬務記錄。
可選的,在其他實施方式中,在服務端10以及客戶端20之間還可以包括網關,客戶端20與網關連接,網關可用于隔離游戲服務器與玩家,保護游戲服務器不受外部攻擊,網關用于將客戶端20的訪問請求轉發至服務器10,并將相應的處理結果返回至客戶端20。
當客戶端20數量較多時,由于每個客戶端20在游戲過程中都需要與服務器10交互數據,此時,數據量較多不僅會導致擁塞,還會導致服務器cpu和i/o資源消耗極大,同時信息量過載時還會產生傳輸時延,影響游戲用戶的體驗。本發明實施例基于此,提出一種信息處理方法,通過采用協程架構,使得各個協程之間獨立運行,保證實時性和高性能。
圖2為本發明實施例提供的一種信息處理方法第一實施例的流程圖。該信息處理方法應用于主協程、第一協程以及第二協程,所述主協程用于調度所述第一協程以及第二協程,可以理解的是,所述第一協程以及第二協程的個數可以為多個,所述方法包括以下步驟:
步驟s201中,第一協程執行獲取函數以訪問預設的任務隊列。
具體的,協程可以認為是輕量級的線程,在協程運行過程中,各個協程也擁有自己的寄存器上下文和棧,在協程進行調度切換時,被切換的協程的寄存器上下文和棧將進行保存,當該協程切回時,會恢復先前保存的寄存器上下文和棧,從而可以實現多個協程之間的快速切換,提高運行效率。
在本實施例中,首先第一協程執行獲取函數以訪問預設的任務隊列。由于在游戲過程中,客戶端與服務器之間是需要交互數據的,通信是雙向的。所述第一協程可以對應游戲客戶端的數據流,也可以對應游戲服務器的數據流。當所述第一協程對應游戲客戶端時,在用戶執行相應的命令了之后,第一協程根據用戶命令發出獲取函數以獲取相應的結果,根據該獲取函數訪問對應的任務隊列;所述任務隊列包括包括游戲客戶端請求的游戲邏輯。所述游戲邏輯可以是各種游戲動作、游戲指令等。當所述第一協程對應服務器時,第一協程用于訪問任務隊列,以讀取客戶端的請求。
步驟s202中,第二協程根據接收的指令生產任務,并將所述任務放入所述任務隊列。
具體的,當所述第一協程對應游戲客戶端時,第二協程對應服務器,此時第二協程根據接收到的指令生產任務,所述任務包括對應游戲邏輯的響應結果,并將任務放入任務隊列,以供第一協程訪問;當所述第一協程對應服務器時,所述第二協程對應客戶端,此時第二協程接收的指令為游戲玩家發出的指令,第二協程根據玩家的指令生成相應的請求,根據請求生產任務,并放入任務隊列。
步驟s203中,所述第一協程從所述任務隊列中獲取任務,并處理所述任務。
具體的,當任務隊列中存在任務時,第一協程從所述任務隊列中獲取任務,并處理獲取到的任務??梢岳斫獾氖?,本實施例中,任務隊列可以由多個,對應于不同的游戲邏輯。由于不同的游戲形式包括不同的游戲內容、游戲單元,因此游戲邏輯也多種多樣,本發明實施例并不以此為限。
可選的,本發明實施例中,基于google公司開源的protobuf技術實現,從而實現客戶端和服務器的協同,在客戶端和服務器的通信過程中,將數據對象序列為二進制數據,相對于現有的采用xml技術能夠縮小數據包大小,提高傳輸效率。
上述可知,本發明實施例中的信息處理方法,通過采用協程的架構,由主協程分別調度第一協程、第二協程運行,合理分配各個協程之間的資源,各協程之間獨立運行,無需加鎖,提高了運行效率,能夠保證信息處理的實時性以及高性能,提高服務器對客戶端的反應時間,降低時延,提升用戶體驗。
圖3為本發明實施例提供的一種信息處理方法第二實施例的流程圖。對比圖2所示的第一實施例,本實施例中,還包括在任務隊列為空時的相關步驟,該信息處理方法包括以下步驟s301-s305。
在步驟s301中,第一協程執行獲取函數以訪問預設的任務隊列。
在步驟s302中,若所述任務隊列為空,則所述第一協程向所述主協程發送等待信息。
具體的,當任務隊列為空時,此時第一協程執行的獲取函數并不返回結果,而是由第一協程向主協程發送等待信息,所述等待信息用于向主協程申請當有任務進入任務隊列時觸發第一協程,在發出等待信息之后,第一協程掛起自身,并在掛起之后,將占用的cpu資源返回給主協程。
不同于傳統的線程模式的調度和掛起需要其他程序調度,在采用協程架構時,協程可以自行調度自身,從而可以便于不同協程之間的調度,加快運行效率。
在步驟s303中,所述主協程在接收到所述等待信息之后,調度所述第二協程運行。
具體的,主協程在接收到等待信息之后,獲取第一協程返回的cpu資源,并將所述cpu資源分配給第二協程,在分配資源了之后,調度所述第二協程運行。
在步驟s304中,第二協程根據接收的指令生產任務,并將所述任務放入所述任務隊列。
在步驟s305中,所述第一協程從所述任務隊列中獲取任務,并處理所述任務。
本實施中,當任務隊列為空時,第一協程并不會立即返回獲取函數的結果,而是掛起自身,等待主協程的觸發,并主動返回占用的cpu資源,由主協程調度第二協程運行。
上述可知,本發明實施例中的信息處理方法,通過采用協程的架構,由主協程分別調度第一協程、第二協程運行,合理分配各個協程之間的資源,各協程之間獨立運行,無需加鎖,提高了運行效率,能夠保證信息處理的實時性以及高性能,提高服務器對客戶端的反應時間,降低時延,提升用戶體驗。
圖4為本發明實施例提供的一種信息處理方法第三實施例的流程圖。對比圖3所示的第二實施例,本實施例中,還包括主協程調度第一協程的相關步驟,該信息處理方法包括以下步驟s401-s407。
在步驟s401中,第一協程執行獲取函數以訪問預設的任務隊列。
在步驟s402中,若所述任務隊列為空,則所述第一協程向所述主協程發送等待信息。
在步驟s403中,所述主協程在接收到所述等待信息之后,調度所述第二協程運行。
在步驟s404中,第二協程根據接收的指令生產任務,并將所述任務放入所述任務隊列。
在步驟s405中,所述第二協程根據所述任務隊列向所述主協程發送通知信息,所述通知信息用于標識所述任務隊列的變化。
具體的,在第二協程將任務放入任務隊列之后,根據任務隊列的變化向主協程發送通知信息,所述通知信息用于標識任務隊列的變化,比如,可用于告知主協程任務隊列的任務個數以及任務的屬性。在本實施過程中,第二協程在生產完任務之后,還會掛起自身,并將占用的cpu資源返回給主協程,以供主協程調用。
在步驟s406中,所述主協程識別所述通知信息,并根據所述通知信息調度所述第一協程運行。
具體的,主協程在接收到所述通知信息之后,識別所述通知信息,若所述通知信息對應的任務與第一協程匹配,則根據通知信息調度第一協程運行。主協程還將第二協程返回的cpu資源分配給第一協程,以調度第一協程運行。
在步驟s407中,所述第一協程從所述任務隊列中獲取任務,并處理所述任務。
本實施例中,第一協程和第二協程在執行動作之后,可以掛起自身,并返回占用的資源,由主協程分配資源進行后續的調度,從而可以實現各個協程之間的獨立運行,加快運行效率,并且,不需要對各個協程的任務隊列進行顯示加鎖,各個協程之間不會干擾,保證了運行的可靠性和高性能。
上述可知,本發明實施例中的信息處理方法,通過采用協程的架構,由主協程分別調度第一協程、第二協程運行,合理分配各個協程之間的資源,各協程之間獨立運行,無需加鎖,提高了運行效率,能夠保證信息處理的實時性以及高性能,提高服務器對客戶端的反應時間,降低時延,提升用戶體驗。
為便于更好的實施本發明實施例的上述方案,下面還提供用于配合實施上述方案的信息處理系統。
圖5為本發明實施例提供的一種信息處理系統第一實施例的結構示意圖。所述信息處理系統包括:主協程501、第一協程502以及第二協程503??梢岳斫獾氖牵谝粎f程502和第二協程503的個數可以為多個,本發明實施例并不以此為限。
主協程501用于調度所述第一協程502以及第二協程503;
所述第一協程502用于執行獲取函數以訪問預設的任務隊列;
所述第二協程503用于根據接收的指令生產任務,并將所述任務放入所述任務隊列;
所述第一協程502還用于從所述任務隊列中獲取任務,并處理所述任務。
在其他實施方式中,所述第一協程502還用于當所述任務隊列為空時,向所述主協程501發送等待信息;
所述主協程501還用于在接收到所述等待信息之后,調度所述第二協程503運行。
在其他實施方式中,所述第二協程503還用于在將所述任務放入所述任務隊列之后,根據所述任務隊列向所述主協程501發送通知信息,所述通知信息用于標識所述任務隊列的變化;
所述主協程501還用于識別所述通知信息,并根據所述通知信息調度所述第一協程502運行。
在其他實施方式中,所述第一協程502對應游戲服務器,所述第二協程503對應游戲客戶端;或者所述第一協程502對應游戲客戶端,所述第二協程503對應游戲服務器。
在其他實施方式中,所述任務隊列包括游戲客戶端請求的游戲邏輯。
上述可知,本發明實施例中的信息處理系統,通過采用協程的架構,由主協程分別調度第一協程、第二協程運行,合理分配各個協程之間的資源,各協程之間獨立運行,無需加鎖,提高了運行效率,能夠保證信息處理的實時性以及高性能,提高服務器對客戶端的反應時間,降低時延,提升用戶體驗。
圖6為本發明實施例提供的一種信息處理系統第二實施例的結構示意圖。所述信息處理系統包括:處理器601以及存儲器602,所述處理器601和存儲器602可以通過總線進行通信。所述存儲器602中存儲有可執行的計算機程序,所述處理器601可用于執行所述計算機程序以實現圖1-圖4所述的信息處理方法。
具體的,所述處理器601執行所述計算機程序以運行主協程、第一協程以及第二協程,其中,所述處理器601運行所述主協程以用于調度所述第一協程以及第二協程;
所述處理器601運行第一協程以用于執行獲取函數以訪問預設的任務隊列;
運行第二協程以用于根據接收的指令生產任務,并將所述任務放入所述任務隊列;
運行第一協程以從所述任務隊列中獲取任務,并處理所述任務。
在可選的實施方式中,所述處理器601還用于運行第一協程以用于當所述任務隊列為空時,向所述主協程發送等待信息;
運行所述主協程以用于在接收到所述等待信息之后,調度所述第二協程運行。
在可選的實施方式中,所述處理器601還用于運行所述第二協程以用于在將所述任務放入所述任務隊列之后,根據所述任務隊列向所述主協程發送通知信息,所述通知信息用于標識所述任務隊列的變化;
運行主協程以用于識別所述通知信息,并根據所述通知信息調度所述第一協程運行。
在可選的實施方式中,所述第一協程對應游戲服務器,所述第二協程對應游戲客戶端;或者所述第一協程對應游戲客戶端,所述第二協程對應游戲服務器。
在可選的實施方式中,所述任務隊列包括游戲客戶端請求的游戲邏輯。
上述可知,本發明實施例中的信息處理系統,通過采用協程的架構,由主協程分別調度第一協程、第二協程運行,合理分配各個協程之間的資源,各協程之間獨立運行,無需加鎖,提高了運行效率,能夠保證信息處理的實時性以及高性能,提高服務器對客戶端的反應時間,降低時延,提升用戶體驗。
本發明實施例還提供一種計算機存儲介質,所述計算機存儲介質存儲有可執行的計算機程序,所述計算機程序執行時包括如圖1-4所述信息處理方法的步驟。
在其他實施例中,為了減少服務器端的資源耗費,采用基于tcp(transmissioncontrolprotocol,傳輸控制協議)實現的rpc(remoteprocedurecallprotocol,遠程過程調用協議)系統進行交互,為了實現rpc系統,可選用google公司開源的protobuf技術實現。
在可選的實施例中,采用protobuf可實現abu.rpc,abu.rpc采用python編寫,基于gevent網絡庫以實現吞吐量的i/o,具有以下特性:
1.數據包更小,由于protobuf采用二進制協議,abu.rpc調用時需要網絡傳遞的數據包會比soap/xml-rpc等基于xml技術的遠程過程調用小幾倍到幾十倍。
2.響應時間更快,由于abu.rpc底層以libevent作為i/o,基于操作系統內核消息的異步i/o擁有更好的性能。
3.并行管線,亂序返回。調用方可以在短時間內同時調用多個服務,由于結果是亂序返回的,能夠最大化利用硬件資源。
4.雙向調用,在游戲過程中,服務器和客戶端進程往往互為rpc的服務器端和客戶端,abc.rpc實現了雙向調用。
本發明實施例通過采用協程架構,提高了運行效率,能夠保證信息處理的實時性以及高性能,提高服務器對客戶端的反應時間,降低時延,提升用戶體驗。
需要說明的是,對于前述的各方法實施例,為了簡單描述,故將其都表述為一系列的動作組合,但是本領域技術人員應該知悉,本發明并不受所描述的動作順序的限制,因為根據本發明,某些步驟可以采用其他順序或者同時進行。其次,本領域技術人員也應該知悉,說明書中所描述的實施例均屬于優選實施例,所涉及的動作和模塊并不一定是本發明所必須的。
在上述實施例中,對各個實施例的描述都各有側重,某個實施例中沒有詳述的部分,可以參見其他實施例的相關描述。
本發明實施例方法中的步驟可以根據實際需要進行順序調整、合并和刪減。
本發明實施例裝置中的模塊、單元可以根據實際需要進行合并、劃分和刪減。本領域的技術人員可以將本說明書中描述的不同實施例以及不同實施例的特征進行結合或組合。
通過以上的實施方式的描述,所屬領域的技術人員可以清楚地了解到本發明可以用硬件實現,或固件實現,或它們的組合方式來實現。當使用軟件實現時,可以將上述功能存儲在計算機可讀介質中或作為計算機可讀介質上的一個或多個指令或代碼進行傳輸。計算機可讀介質包括計算機存儲介質和通信介質,其中通信介質包括便于從一個地方向另一個地方傳送計算機程序的任何介質。存儲介質可以是計算機能夠存取的任何可用介質。以此為例但不限于:計算機可讀介質可以包括隨機存取存儲器(randomaccessmemory,ram)、只讀存儲器(read-onlymemory,rom)、電可擦可編程只讀存儲器(electricallyerasableprogrammableread-onlymemory,eeprom)、只讀光盤(compactdiscread-onlymemory,cd-rom)或其他光盤存儲、磁盤存儲介質或者其他磁存儲設備、或者能夠用于攜帶或存儲具有指令或數據結構形式的期望的程序代碼并能夠由計算機存取的任何其他介質。此外。任何連接可以適當的成為計算機可讀介質。例如,如果軟件是使用同軸電纜、光纖光纜、雙絞線、數字用戶線(digitalsubscriberline,dsl)或者諸如紅外線、無線電和微波之類的無線技術從網站、服務器或者其他遠程源傳輸的,那么同軸電纜、光纖光纜、雙絞線、dsl或者諸如紅外線、無線和微波之類的無線技術包括在所屬介質的定影中。如本發明所使用的,盤(disk)和碟(disc)包括壓縮光碟(cd)、激光碟、光碟、數字通用光碟(dvd)、軟盤和藍光光碟,其中盤通常磁性的復制數據,而碟則用激光來光學的復制數據。上面的組合也應當包括在計算機可讀介質的保護范圍之內。
總之,以上所述僅為本發明技術方案的較佳實施例而已,并非用于限定本發明的保護范圍。凡在本發明的精神和原則之內,所作的任何修改、等同替換、改進等,均應包含在本發明的保護范圍之內。