一個支持8~16人的小型網絡遊戲的編寫
掌握了一些基本的網絡socket編程後,本章展示一個支持8~16人的小型網絡遊戲的編寫。
事實上大部分的網絡即時戰略遊戲和網絡體育競技遊戲都最多支持16人同時在線。
在小型網絡遊戲中,所有玩家都運行同一個遊戲客戶端程序,
其中一個玩家(通常是計算機配置最好、網速最快的那位)將同時運行服務器端程序,這也是限制同時在線人數的主要原因。
大量的玩家將使服務器消耗大量的資源,同時運行服務器和客戶端程序會很不現實。
下圖展示了小型網絡遊戲大廳的設計框架:
當服務器啓動遊戲後,服務器在遊戲大廳中調用接收(accept)函數。
這時其他玩家可以加入這個遊戲,一旦人數滿足遊戲要求,服務器可以方便地停止接收狀態,開始遊戲。
其他玩家將不能再加入這個遊戲,除非服務器又打開一個遊戲大廳。
這種結構使得遊戲服務器十分方便地加入遊戲引擎。
服務器的運行流程如下:
(1)創建一個套接字,綁定IP和端口。
(2)服務器監聽端口,等待連接。創建一個遊戲大廳。
(3)服務器處於等待狀態,因此需要兩個進程/線程在服務器端運行:一個界面線程,處理遊戲菜單操作;一個網絡線程,等待連接。
(4)在每個客戶端創建一個Socket,連接遊戲服務器。
(5)服務器更新連接信息,並在遊戲大廳上顯示。同時,將連接用戶信息發送給每個連接用戶。
(6)當所有的用戶都連接到服務器上開始遊戲,關閉服務器偵聽的套接字,中斷所有等待的連接,新的用戶將不可能連接上服務器。
採用上面描述的方法可以容易地設計出類似星際爭霸的網絡遊戲架構。
遊戲服務器只在開始的時候處理連接請求,後繼的所有工作是數據的傳送。
然而這種方法也存在着一些隱患,如某個客戶端在遊戲中斷掉,它將無法連接上服務器。
因此,服務器必須通過一些測試方法(如長時間沒有收到某個客戶端的數據,或者是套接字關閉的通知)來探知是否有客戶端掉線。
此時,服務器必須打開一個臨時的接收套接字,等待掉線客戶端的重新連接。
下面以一個回合制遊戲的運行過程爲例進行簡單分析,如圖所示。
在這個典型的回合制網絡遊戲中,客戶端設計和實現主要包括以下內容:
遊戲的基本功能——處理聲音,動畫等。
遊戲通信——客戶與服務器之間的網絡傳輸細節。
遊戲應用程序——程序線程管理、各種顯示對話框、圖形的處理與顯示。
遊戲處理——處理遊戲邏輯、解析和處理遊戲數據、遊戲運行維護等。
而遊戲的服務器端設計則主要包括:
遊戲通信——負責遊戲中客戶服務器之間的網絡傳輸細節。
遊戲協議——對傳遞的數據進行打包和解包,並根據所包含的指令進行相應的操作。
遊戲邏輯——負責處理遊戲邏輯。
線程管理——線程的生成、結束和分配任務等。
服務器數據庫的內容則包括:
角色表——角色ID、賬號ID、角色的名稱、屬性和幫派等。
道具表——道具ID、所屬角色ID、道具各類屬性等。
幫派表——幫派ID、名稱、幫派頭目、介紹、總人數等。
郵件表——郵件ID、發件人角色ID、收件人角色ID、郵件內容等。
整個遊戲的運營與管理包含以下機制:
客戶端下載和安裝。
會員註冊。
WEB大廳管理。
客戶端管理。
身份驗證。
房間。
用戶信息。
廣告。
大型網絡遊戲設計中的一個重要問題是負載平衡,要實現高效的網絡遊戲,需要大量的框架設計和底層優化設計。
除了網絡編程方面的知識,三維遊戲圖形引擎設計也是一個很好的參考。
圖形繪製是網絡遊戲中最耗時、最有可能造成網絡堵塞的原因,因此對於二維大型網絡遊戲以及三維大型網絡遊戲,圖形引擎設計和網絡框架設計必須緊密結合,互相考慮,互爲依存。
事實上大部分的網絡即時戰略遊戲和網絡體育競技遊戲都最多支持16人同時在線。
在小型網絡遊戲中,所有玩家都運行同一個遊戲客戶端程序,
其中一個玩家(通常是計算機配置最好、網速最快的那位)將同時運行服務器端程序,這也是限制同時在線人數的主要原因。
大量的玩家將使服務器消耗大量的資源,同時運行服務器和客戶端程序會很不現實。
下圖展示了小型網絡遊戲大廳的設計框架:
當服務器啓動遊戲後,服務器在遊戲大廳中調用接收(accept)函數。
這時其他玩家可以加入這個遊戲,一旦人數滿足遊戲要求,服務器可以方便地停止接收狀態,開始遊戲。
其他玩家將不能再加入這個遊戲,除非服務器又打開一個遊戲大廳。
這種結構使得遊戲服務器十分方便地加入遊戲引擎。
服務器的運行流程如下:
(1)創建一個套接字,綁定IP和端口。
(2)服務器監聽端口,等待連接。創建一個遊戲大廳。
(3)服務器處於等待狀態,因此需要兩個進程/線程在服務器端運行:一個界面線程,處理遊戲菜單操作;一個網絡線程,等待連接。
(4)在每個客戶端創建一個Socket,連接遊戲服務器。
(5)服務器更新連接信息,並在遊戲大廳上顯示。同時,將連接用戶信息發送給每個連接用戶。
(6)當所有的用戶都連接到服務器上開始遊戲,關閉服務器偵聽的套接字,中斷所有等待的連接,新的用戶將不可能連接上服務器。
採用上面描述的方法可以容易地設計出類似星際爭霸的網絡遊戲架構。
遊戲服務器只在開始的時候處理連接請求,後繼的所有工作是數據的傳送。
然而這種方法也存在着一些隱患,如某個客戶端在遊戲中斷掉,它將無法連接上服務器。
因此,服務器必須通過一些測試方法(如長時間沒有收到某個客戶端的數據,或者是套接字關閉的通知)來探知是否有客戶端掉線。
此時,服務器必須打開一個臨時的接收套接字,等待掉線客戶端的重新連接。
下面以一個回合制遊戲的運行過程爲例進行簡單分析,如圖所示。
在這個典型的回合制網絡遊戲中,客戶端設計和實現主要包括以下內容:
遊戲的基本功能——處理聲音,動畫等。
遊戲通信——客戶與服務器之間的網絡傳輸細節。
遊戲應用程序——程序線程管理、各種顯示對話框、圖形的處理與顯示。
遊戲處理——處理遊戲邏輯、解析和處理遊戲數據、遊戲運行維護等。
而遊戲的服務器端設計則主要包括:
遊戲通信——負責遊戲中客戶服務器之間的網絡傳輸細節。
遊戲協議——對傳遞的數據進行打包和解包,並根據所包含的指令進行相應的操作。
遊戲邏輯——負責處理遊戲邏輯。
線程管理——線程的生成、結束和分配任務等。
服務器數據庫的內容則包括:
角色表——角色ID、賬號ID、角色的名稱、屬性和幫派等。
道具表——道具ID、所屬角色ID、道具各類屬性等。
幫派表——幫派ID、名稱、幫派頭目、介紹、總人數等。
郵件表——郵件ID、發件人角色ID、收件人角色ID、郵件內容等。
整個遊戲的運營與管理包含以下機制:
客戶端下載和安裝。
會員註冊。
WEB大廳管理。
客戶端管理。
身份驗證。
房間。
用戶信息。
廣告。
大型網絡遊戲設計中的一個重要問題是負載平衡,要實現高效的網絡遊戲,需要大量的框架設計和底層優化設計。
除了網絡編程方面的知識,三維遊戲圖形引擎設計也是一個很好的參考。
圖形繪製是網絡遊戲中最耗時、最有可能造成網絡堵塞的原因,因此對於二維大型網絡遊戲以及三維大型網絡遊戲,圖形引擎設計和網絡框架設計必須緊密結合,互相考慮,互爲依存。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.