本發明涉及計算機技術領域,尤其涉及一種多人游戲的實時通訊方法及系統。
背景技術:
目前,現如今的很多單機手游,很多都會新增聯機模式來讓各個玩家之間進行互動,以此增加游戲的可玩性。但要實現多人聯機,就必須要有服務器。以unity游戲引擎而言,開發者的選擇很多。具體地,可以自己搭建服務器,也可以是利用unity自帶的networkview,同時,也可選擇利用第三方提供的后端服務器。
然而,不論是利用unity自帶的networkview,或者是選擇第三方后端服務器,都在一定程度上存在著局限性和不可擴展性。而且,很多第三方后端服務器提供的功能較多,插件較大,然而開發者需要用到的可能只有幾個功能,這在一定程度上將導致游戲的包體較大。此外,如選擇自己搭建服務器,則通常一個游戲對應于一個服務器,如此導致每款游戲的開發過程和后期維護中,需要各自的服務端和客戶端配合開發。
有鑒于此,針對上述問題,有必要提出進一步的解決方案。
技術實現要素:
本發明的目的在于提供一種多人游戲的實時通訊方法及系統,以克服現有技術中存在的不足。
為實現上述發明目的,本發明提供一種多人游戲的實時通訊方法,其包括如下步驟:
s1、請求連接并訪問游戲的主服務器;
s2、通過主服務器提供可供選擇的若干子服務器,連接并訪問選定的子服務器;
s3、與由選定的子服務器所覆蓋的其他玩家通過掛載在游戲對象上的觀察者腳本組件發送消息,并通過子服務器轉發該發送的消息;
s4、對發送的消息進行判斷,如滿足接收條件,則遠程調用子服務器中的函數進行實時通訊,并對接收的消息進行邏輯處理。
作為本發明的多人游戲的實時通訊方法的改進,所述主服務器將供選擇的若干子服務器以游戲房間列表的形式發送至客戶端供玩家選擇。
作為本發明的多人游戲的實時通訊方法的改進,所述主服務器實時更新所述游戲房間列表的信息。
作為本發明的多人游戲的實時通訊方法的改進,所述觀察者腳本組件具有多個觀察屬性,多個觀察屬性包括同步游戲對象的位置、旋轉角度和縮放比例。
作為本發明的多人游戲的實時通訊方法的改進,所述發送的消息中包括調用的函數名及函數的參數。
為實現上述發明目的,本發明提供一種多人游戲的實時通訊系統,其包括:
訪問模塊,其用于實現:
請求連接并訪問游戲的主服務器;
選擇模塊,其用于實現:
通過主服務器提供可供選擇的若干子服務器,連接并訪問選定的子服務器;
消息發送模塊,其用于實現:
與由選定的子服務器所覆蓋的其他玩家通過掛載在游戲對象上的觀察者腳本組件發送消息,并通過子服務器轉發該發送的消息;
判斷調用模塊,其用于實現:
對發送的消息進行判斷,如滿足接收條件,則遠程調用子服務器中的函數進行實時通訊,并對接收的消息進行邏輯處理。
作為本發明的多人游戲的實時通訊系統的改進,所述選擇模塊還用于實現:
通過所述主服務器將供選擇的若干子服務器以游戲房間列表的形式發送至客戶端供玩家選擇。
作為本發明的多人游戲的實時通訊系統的改進,所述選擇模塊還用于實現:
通過所述主服務器實時更新所述游戲房間列表的信息。
作為本發明的多人游戲的實時通訊系統的改進,所述觀察者腳本組件具有多個觀察屬性,多個觀察屬性包括同步游戲對象的位置、旋轉角度和縮放比例。
作為本發明的多人游戲的實時通訊系統的改進,所述發送的消息中包括調用的函數名及函數的參數。
與現有技術相比,本發明的有益效果是:本發明基于一個主服務器和多個子服務器實現了服務端與客戶端的解耦,使得服務器只負責客戶端之間的數據的轉發,客戶端負責數據的邏輯處理,克服了游戲開發和維護時,需要服務端和客戶端配合開發的問題。
附圖說明
圖1為本發明的多人游戲的實時通訊方法一具體實施方式的方法流程示意圖。
具體實施方式
下面結合附圖所示的各實施方式對本發明進行詳細說明,但應當說明的是,這些實施方式并非對本發明的限制,本領域普通技術人員根據這些實施方式所作的功能、方法、或者結構上的等效變換或替代,均屬于本發明的保護范圍之內。
如圖1所示,本發明提供一種多人游戲的實時通訊方法,其包括如下步驟:
s1、請求連接并訪問游戲的主服務器。
其中,玩家連接并訪問游戲的主服務器時,將以玩家登錄游戲大廳的形式實現,所述主服務器同時與若干子服務器相連接,任一上述子服務器則對應于游戲大廳中的若干游戲房間。
s2、通過主服務器提供可供選擇的若干子服務器,連接并訪問選定的子服務器。
其中,主服務器提供可供選擇的若干子服務器時,所述主服務器將供選擇的若干子服務器以游戲房間列表的形式發送至客戶端供玩家選擇。同時,當子服務器新增或變更時,其對應的游戲房間被創建或刪除。此時,所述主服務器實時更新所述游戲房間列表的信息。其具體表現為:上述游戲的大廳會跟隨實時刷新。此外,客戶端創建了一個房間后,根據需要還可以對房間進行多個屬性的設置,比如設置密碼、游戲難度、人數上限等。
s3、與由選定的子服務器所覆蓋的其他玩家通過掛載在游戲對象上的觀察者腳本組件發送消息,并通過子服務器轉發該發送的消息。
其中,為了能夠確保消息能夠發送和接收成功,還需要確保該消息發送方和接收方一直存在在游戲中。同時,發送的消息可以為同一個房間內的客戶端互相發送網絡信息,還可以發送緩存消息。此外,緩存消息也將被發送到未來連接進來的玩家,比如有新的玩家進入游戲房間。
所述觀察者腳本組件具有多個觀察屬性,多個觀察屬性包括同步游戲對象的位置、旋轉角度和縮放比例,上述觀察屬性可供開發者進行自由選擇。上述觀察者腳本組件可采用現有通用的用于實現發送消息的腳本組件。
s4、對發送的消息進行判斷,如滿足接收條件,則遠程調用子服務器中的函數進行實時通訊,并對接收的消息進行邏輯處理。
如此,服務器只負責客戶端之間的數據的轉發,客戶端負責數據的邏輯處理,從而克服了游戲開發和維護時,需要服務端和客戶端配合開發的問題。此外,為了函數的調用,所述發送的消息中包括調用的函數名及函數的參數。從而,當判斷滿足接收條件后,依據發送消息中的函數名及其參數進行調用。同時,消息的接收方調用函數后,則被調用的函數可以始終以與其相匹配的客戶端為目標。
基于如上所述的多人游戲的實時通訊方法,本發明還提供一種多人游戲的實時通訊系統,其包括:訪問模塊、選擇模塊、消息發送模塊、判斷調用模塊。
所述訪問模塊用于實現:請求連接并訪問游戲的主服務器。
具體地,所述訪問模塊基于玩家的設備終端。此時,玩家連接并訪問游戲的主服務器時,以玩家登錄游戲大廳的形式實現,所述主服務器同時與若干子服務器相連接,任一上述子服務器則對應于游戲大廳中的若干游戲房間。
所述選擇模塊用于實現:通過主服務器提供可供選擇的若干子服務器,連接并訪問選定的子服務器。
具體地,所述選擇模塊基于玩家所在的玩家所在的網絡運營商等。此時,所述主服務器將供選擇的若干子服務器以游戲房間列表的形式發送至客戶端供玩家選擇。同時,當子服務器新增或變更時,其對應的游戲房間被創建或刪除。此時,所述主服務器實時更新所述游戲房間列表的信息。其具體表現為:上述游戲的大廳會跟隨實時刷新。此外,客戶端創建了一個房間后,根據需要還可以對房間進行多個屬性的設置,比如設置密碼、游戲難度、人數上限等。
所述消息發送模塊用于實現:與由選定的子服務器所覆蓋的其他玩家通過掛載在游戲對象上的觀察者腳本組件發送消息,并通過子服務器轉發該發送的消息。
其中,所述消息發送模塊基于游戲對象上的觀察者腳本組件。具體地,所述觀察者腳本組件具有多個觀察屬性,多個觀察屬性包括同步游戲對象的位置、旋轉角度和縮放比例,上述觀察屬性可供開發者進行自由選擇。上述觀察者腳本組件可采用現有通用的用于實現發送消息的腳本組件。
此外,為了能夠確保消息能夠發送和接收成功,還需要確保該消息發送方和接收方一直存在在游戲中。同時,發送的消息可以為同一個房間內的客戶端互相發送網絡信息,還可以發送緩存消息。此外,緩存消息也將被發送到未來連接進來的玩家,比如有新的玩家進入游戲房間。
所述判斷調用模塊用于實現:對發送的消息進行判斷,如滿足接收條件,則遠程調用子服務器中的函數進行實時通訊,并對接收的消息進行邏輯處理。
具體地,所述訪問模塊基于玩家的設備終端,其可用于實現數據的邏輯處理以及函數的調用。如此,服務器只負責客戶端之間的數據的轉發,客戶端負責數據的邏輯處理,從而克服了游戲開發和維護時,需要服務端和客戶端配合開發的問題。
此外,為了函數的調用,所述發送的消息中包括調用的函數名及函數的參數。從而,當判斷滿足接收條件后,依據發送消息中的函數名及其參數進行調用。同時,消息的接收方調用函數后,則被調用的函數可以始終以與其相匹配的客戶端為目標。
綜上所述,本發明基于一個主服務器和多個子服務器實現了服務端與客戶端的解耦,使得服務器只負責客戶端之間的數據的轉發,客戶端負責數據的邏輯處理,克服了游戲開發和維護時,需要服務端和客戶端配合開發的問題。
對于本領域技術人員而言,顯然本發明不限于上述示范性實施例的細節,而且在不背離本發明的精神或基本特征的情況下,能夠以其他的具體形式實現本發明。因此,無論從哪一點來看,均應將實施例看作是示范性的,而且是非限制性的,本發明的范圍由所附權利要求而不是上述說明限定,因此旨在將落在權利要求的等同要件的含義和范圍內的所有變化囊括在本發明內。不應將權利要求中的任何附圖標記視為限制所涉及的權利要求。
此外,應當理解,雖然本說明書按照實施方式加以描述,但并非每個實施方式僅包含一個獨立的技術方案,說明書的這種敘述方式僅僅是為清楚起見,本領域技術人員應當將說明書作為一個整體,各實施例中的技術方案也可以經適當組合,形成本領域技術人員可以理解的其他實施方式。