unity 網絡遊戲架構設計(第10課:PhotonServer 服務器部署)之美

第10課:PhotonServer 服務器部署

前面介紹的都是關於客戶端的各個模塊,到此核心模塊就完成了,其他的可以在此基礎上擴展就可以了。下面介紹關於服務器的部署,在客戶端完成與服務器通信之前,先把服務器的部署做好,使用的是 Photon Server 服務器。

Photon 服務器介紹

我們選擇 Photon Server 服務器是因爲該服務器使用起來非常方便,尤其對於初學者更是如此,希望通過本篇教程的學習,能夠幫助讀者快速的成長。

在部署服務器之前先介紹一下客戶端與服務器之間的執行流程如下圖所示:

enter image description here

首先客戶端連接到主服務器,他們可以加入遊戲大廳,當客戶端在主服務器上調用 JoinGame 或 JoinRandomGame 操作時,主服務器查找運行着的遊戲服務器,並返回 IP 地址給客戶端。這時他們在主服務器上調用了 CreateGame 操作,這個遊戲服務器不是主服務器實際創建的,而是主服務器僅僅選擇了最少工作負荷遊戲服務器並將 IP 地址給返回客戶端。

這個過程給讀者通過圖的方式展示如下:

enter image description here

客戶端接收到 IP 地址後會和主服務器斷開,通過獲得的 IP 地址重新鏈接對應的遊戲服務器。

下面再介紹一下主服務器也就是 Master Server。

主服務器總是知道哪些遊戲服務器是可用的,多少遊戲服務器被託管,當前的工作負荷是多少等等。

爲此,每個遊戲服務器在啓動時就要連接到主服務器,主服務器程序包含了一個遊戲集合,儲存着傳入遊戲服務器用戶。執行流程就是遊戲服務器調用 RegisterGameServer 操作連接到主服務器,這樣遊戲服務器添加到主服務的遊戲服務器集合和負載均衡器中,當斷開遊戲服務器與主服務器鏈接時它將被移除。

換句話說,Master Server 跟 Game Server 是一對多的關係,Master Server 能起到負載均衡的作用。再介紹 GameServer 服務器,當客戶端從主服務器接收到遊戲服務器的地址時,客戶端可以在遊戲服務器上調用任意可用的操作,唯一不同的是在遊戲服務器上我們有單獨的操作函數 JoinGame 和 CreateGame。一旦客戶端與遊戲服務器的連接被建立,遊戲服務器將在主服務器上調用 Register 操作,做一個註冊操作,讓主服務器知道遊戲服務器的信息。也就是說,遊戲服務器將公佈所有的遊戲狀態到主服務器上。

當然,在遊戲被用戶創建、加入、離開或者屬性被更改時,遊戲狀態就會被更新到主服務器上。那麼主服務器是如何決定哪個遊戲服務器處理新的 CreateGame 請求(實際的負載均衡算法)?

遊戲服務器定期報告他們當前的工作負荷到主服務器,這工作負荷包括:CPU 的使用、帶寬的使用等等。具體執行是主服務器會在 LoadBalancer 類中儲存了每個遊戲服務器的負載水平,它還附加處理一個包含所有目前最低負荷水平的服務器的列表。任何時候一個客戶端調用 CreateGame 操作時,主服務器會從 LoadBalancer 中獲取一個最低負荷的服務器地址返回給客戶端並連接到服務器。

以上是講的關於服務器核心模塊以及執行流程的介紹,接下來介紹 Photon 服務器部署。

Photon 服務器部署

首先我們去 PhotonEngine 的官方網站下載 PhotonServer SDK,下載網址詳見這裏

下載後安裝,它的安裝會將文件解壓到一個文件夾中,內容如下:

enter image description here

文件夾中包含的內容介紹如下:

  • deploy:部署程序
  • doc:文檔
  • lib:存放類庫,在接下來的客戶端(Unity3D)和服務器端開發需要引用到
  • src-server:Demo 源碼

把核心的內容先給讀者介紹,先打開 Deploy 文件夾,再打開 Loadbalancing 文件夾裏面有兩個文件夾,Loadbalancing 文件夾中的內容涉及到負載均衡操作:一個是 Master,一個是 Game Server;我們在部署 GameServer 注意事項:

你需要確保遊戲服務器可以註冊到主服務器上,在文本文件 Photon.LoadBalancing.dll.config 中設置 MasterIPAddress 爲主服務器的公共 IP 地址。

我們還需要確保遊戲客戶端可以到達遊戲服務器,在每個遊戲服務器上,你需要設置公共的 IP 地址,因爲客戶端要鏈接遊戲服務器的。這裏面就有個問題,如果你兩個遊戲服務器放在一個服務器上,要注意了,因爲各個遊戲服務器的 IP 地址是不同的。

接下來介紹部署 Master Server 主服務器注意事項:

要確保你的遊戲服務器和客戶端使用的 IP 可以連接到獨立的主服務器。另外,發送的數據包大小被限制在所有的設備上都被限制爲1200字節,如果數據大於1200字節則分發在多個命令中。這樣是可靠的,客戶端可以重組數據報,這就是我們常說的分包與組包,PhotonServer 都爲我們做好了。

介紹了半天都是一些理論上的東西,涉及到具體操作,因爲網上有作者分享了一篇博客詳細講述了關於 Photon Server 部署流程,在這裏也發給讀者參考,網址詳見這裏

讀者可以按照這個流程就可以把服務器配置好,在這裏重點的地方給讀者再強調一遍,我們運行程序首先打開 deploy 目錄中的文件,如果系統是64位的,點擊bin_Win64文件夾中的 PhotonControl.exe 程序運行,效果如下:

enter image description here

我們可以自定義服務器就像博客中介紹的那樣,我們也可以在配置文件中設置服務器 IP 地址。

enter image description here

服務器配置可以使用局域網,如果使用外網需要把服務器配置到雲服務器,比如阿里雲服務器,這樣訪問就很方便了,我們的架構設計使用的是 Photon Server 官方提供的雲服務器,主要是方便測試,Photon Server 免費版只支持20個用戶同時在線上,如果需要增多人數,需要讀者購買。服務器部署其實比較簡單,部署好了服務器後,我們要進行測試看看服務器是否是連通的。

服務器與客戶端通信測試

測試服務器與客戶端通信,網上同樣有文章爲我們介紹操作步驟,網址詳見這裏

以上就是關於 Photon Server 的部署。

另外,我們介紹了半天也沒介紹數據庫,其實 Photon Server 支持 MySQL 和 NoSQL 如何與數據庫通信,網上有作者已經幫我們寫好教程了,在這裏直接拿過來參考,網址詳見這裏

其中,NHibernate 是你比較成熟的,開放源的對象關係映射器的。因爲 Photon Server 市面上也有一些公司在使用,對於初學者來說掌握起來比較方便,它對於用戶來說開放了邏輯編寫功能,使用者無需關心其內部實現,只需要根據接口文檔寫邏輯就可以了,而且擴展起來非常方便。Photon Server 也是在一直更新。其他的遊戲服務器流程跟這個非常類似,希望讀者能做到觸類旁通。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章