Photon 5 更新與改變
主要變化
名稱服務器/NameServer
NameServer在光子云PhotonCloud上已經(jīng)存在了一段時間,我們決定在v5中把它帶到獨立的Photon服務器上。使用NameServer作為LoadBalancing實例的默認應用,在切換到MasterServer之前,客戶應首先連接到NameServer,這是現(xiàn)在部署Photon的首選方式。
NameServer對于配置不同的部署區(qū)域或集群非常有用。因此,負載平衡是在另一個層面上完成的。這一方式已經(jīng)被我們的企業(yè)客戶使用,且反響很好。
內(nèi)置的驗證提供者
NameServer上的自定義驗證功能帶來了四個開箱即用的驗證提供者,這些功能以前只在光子云PhotonCloud上可用,他們包括:Facebook、Steam、Oculus和Vive。這也是廣受我們企業(yè)客戶好評和使用的另一項功能。
PhotonSocketServer
配置全面更新
配置系統(tǒng)已經(jīng)完全改變。它現(xiàn)在依靠.NET Core的配置提供者來加載、解析和綁定。服務器應用程序現(xiàn)在需要Microsoft.Extensions.Configuration.Abstractions NuGet包,以便使用Microsoft.Extensions.Configuration.IConfiguration接口,該接口將通過一個新的構造函數(shù)注入到應用程序中。
PhotonServer.config文件現(xiàn)在在服務器啟動時也具有XML模式驗證功能。
一些新的限制
我們一直都有本地設置(通過PhotonServer.config配置)來設置數(shù)據(jù)傳輸限制(消息大小,緩沖區(qū)大小,數(shù)據(jù)傳輸率)。
因此,為了給Photon服務器增加一層保護,我們引入了新的設置,您可以通過微調(diào)來定義這些使用限制。
MessageRate:每個對等體每秒允許的最大傳入信息數(shù)量。默認值為5000。MessageDataRate: 允許每個peer每秒緩沖傳入數(shù)據(jù)的最大尺寸。默認為2147483647(int.MaxValue)。MaxMessageSize: 允許傳入的消息的最大尺寸。默認值為512000。
閱讀更多關于如何在 “管理的SocketServer設置 “配置(英文官網(wǎng))。
序列化協(xié)議 V1.8
服務器現(xiàn)在支持1.8版本的序列化協(xié)議,這也是最新客戶端SDK的默認狀態(tài)。新的協(xié)議為大多數(shù)常用的類型,帶來了新的優(yōu)化和緊湊的數(shù)據(jù)傳輸技術。
安全證書/驗證設置
在安全連接的驗證格式和配置的方面,我們已經(jīng)從安全通道(Schannel)轉(zhuǎn)換為OpenSSL。你可以在這里(英文官網(wǎng))找到設置證書的新方法。
Photon Server v5現(xiàn)在也支持TLS 1.2和TLS 1.3。
定時斷開連接
在v5中,我們增加了一種定時或延遲斷開連接的方法,將客戶端的ConnectionState設置為ScheduledForDisconnect,并讓服務器能夠在斷開連接前向客戶端發(fā)送DisconnectMessage。默認的延遲是5000毫秒。同時服務器有更多的理由斷開服務器的連接,斷開原因可能是一個錯誤。
當一個peer被安排斷開連接時,服務器將丟棄從該peer傳入的任何數(shù)據(jù)。
32位的支持終止
PhotonSocketServer現(xiàn)在只有64位的版本。”deploy\bin_Win32 “目錄已經(jīng)不在保留。
負載平衡
配置全面更新
配置文件已被改變,因此每個應用程序都有自己的文件,并有一個簡化的新結構。插件的配置也移到了它自己單獨的配置文件中。此外,HttpQueueSettings現(xiàn)在有自己單獨的部分,并且可以在使用HttpQueue的部分中進行配置。
新的限制選項
對于LoadBalancing服務器應用程序,我們之前總是有各種可配置限制。但這似乎并不足以保護Photon服務器免受惡意客戶或黑客的攻擊或濫用。
操作限制
通用:
我們?yōu)槊總€操作代碼增加了操作請求和參數(shù)限制。
特定:
對于最常用的操作同樣也有一些限制:加入、創(chuàng)建和SetProperties。
游戲服務器/GameServer:
JoinGameRate:每個peer每秒的最大Join請求數(shù)。CreateGameRate:每個peer每秒最大的創(chuàng)建請求數(shù)。SetPropertiesRate:每個peer每秒最大的SetProperties請求數(shù)。
主服務器/MasterServer:
MaxConcurrentJoinRequests:每個peer的待處理(排隊的未處理請求)的最大聯(lián)合操作數(shù)量。MaxTotalJoinRequests:每個peer的最大聯(lián)合操作總數(shù)。MaxJoinedGames:同一個peer同時加入的房間的最大數(shù)量。
HTTP限制
除了 “常規(guī) “的HTTP隊列設置外,你可以通過LimitHttpResponseMaxSize來限制傳入的HTTP響應的有效載荷大小。這可以應用于自定義認證、WebRPCs或自定義插件(包括Webhooks)。
事件緩存的限制
SlicesCount:每個房間的事件緩存slices的最大數(shù)量。EventsCount:每個房間的最大緩存事件數(shù)(所有角色和全局緩存)。ActorEventsCount:每個房間每個角色的最大緩存事件數(shù)。
屬性限制
游戲服務器/GameServer:
MaxUniqPropertyKeysPerPeer:每個角色在每個房間內(nèi)的不同屬性鍵的最大數(shù)量。MaxPropertiesPerRequest:每個SetProperties請求的最大不同屬性數(shù)量。MaxPropertiesSizePerGame:每個房間所有屬性的最大總數(shù)/總和。MaxPropertiesSizePerRequest:每個SetProperties請求的任何單一屬性的最大尺寸。
大廳限制
MaxGamesOnJoin:當客戶端加入大廳時,在GameList事件中發(fā)送的房間列表條目的最大數(shù)量。MaxGamesInUpdates:在GameListUpdate事件中發(fā)送的房間列表條目的最大數(shù)量。MaxGamesInGetGamesListResponse:作為GetGameList請求的結果,SQL房間列表條目的最大數(shù)量。Total:每個應用程序的大廳的最大數(shù)量。
.NET目標
為了準備完全支持.NET核心的v6版本,服務器源代碼的.NET項目風格在v5中發(fā)生了變化,我們增加了構建文件來準備。
構建目標配置(還有目標構建輸出文件夾等)是通過MSBuild文件(csproj,csproj.includes)和自定義定義和宏來處理的。參見 “build/include “文件夾。構建流程和部署過程主要通過 “dotnet “命令完成。這就是為什么你需要安裝.NET Core運行庫才能構建和部署,盡管.NET Core還不是一個支持的構建目標。
除此之外,目標的.NET框架版本從4.0更新到4.6.1。但你也用高于4.6.1的.NET框架版本進行構建。
本地NuGet資源庫
在v5 SDK中,用于服務器應用程序開發(fā)的主要庫現(xiàn)在可以作為本地NuGet包使用。
- ExitGamesLibs (ExitGamesLibs.dll)
- ExitGames.PhotonHostRuntimes (PhotonHostRuntimesInterfaces.dll)
- ExitGames.Logging (ExitGames.Logging.dll)
- ExitGames.Logging.Log4Net (ExitGames.Logging.Log4Net.dll)
這通過 “nuget.config “和SDK文件夾根部的Nuget包完成。如果你的解決方案沒有自動完成,也可以從 “nuget.config“文件中手動添加包源 “WorkspaceNuget“。
改進的反饋控制系統(tǒng)(LoadBalancer
LoadBalancer使用的反饋控制系統(tǒng)得到了增強。它現(xiàn)在包含雙倍反饋級別(過去是5級,現(xiàn)在是10級)。我們還引入了優(yōu)先權/Priorities和儲備/Reserve。
新的服務器錯誤代碼
HttpLimitReached: 32745,這意味著HTTP請求失敗,因為已經(jīng)達到了一個限制。ExternalHttpCallFailed: 32744,這意味著HTTP請求由于與目標Web服務有關的問題而失敗。OperationLimitReached: 32743,這意味著操作被阻止了,因為已經(jīng)達到了一個限制。SlotError:32742,這意味著更新預期用戶時出現(xiàn)了錯誤。SecureConnectionRequired:32740,這意味著peer被斷開,因為服務器要求安全連接,而此安全連接是通過LoadBalancing部分的 “RequireSecureConnection“設置啟用的。EventCacheExceeded: 32739,這意味著事件緩存被取消了,因為已經(jīng)達到了一個限制。ExpectedGSCheckFailure:32738,這意味著加入操作失敗,因為客戶端沒有連接到由主服務器提供并在授權令牌中加密的正確游戲服務器。這需要游戲服務器設置 “TokenCheckExpectedHostAndGame“生效。ExpectedGameCheckFailure:32737,這意味著加入操作失敗,因為客戶端沒有提供正確的預期GameId/RoomName,其由MasterServer提供并在auth token中加密。這需要游戲服務器設置 “TokenCheckExpectedHostAndGame“設置啟用。AuthRequestWaitTimeout:32736,一個斷開連接的原因,而不是一個錯誤代碼。這意味著peer被斷開連接,因為它在服務器上待的太久卻并沒有認證。此只發(fā)生在主服務器上。超時時間可以在主服務器設置 “AuthTimeout“中設置。默認是1200000毫秒(20分鐘)。ConnectionSwitch: 32735,一個斷開原因,而不是一個錯誤代碼。它意味著斷線的peer快速重聯(lián)(使用相同的會話令牌)重新聯(lián)入房間里的活動角色。ActorRemoved:32734,一個斷開的原因而不是錯誤代碼。它意味著peer因為相應的角色被從房間中移除而斷開。
其他變化
修正部分
- 服務器現(xiàn)在按照預期,在所有情況下作為認證操作的結果而返回
UserId。如果客戶端或認證提供者沒有設置UserId,將返回服務器上生成的GUID。在v4中,服務器在這種情況下不返回UserId。 - 另外,在認證過程中,如果認證提供者沒有設置
Nickname,則服務器將不會返回任何值。在v4中,服務器在這種情況下會返回一個空的Nickname。 - 服務器現(xiàn)在不允許同一個角色多次被添加到同一個興趣小組/interest group中。在v4中,這操作是有可能的,它導致了多次收到該角色發(fā)送到該興趣小組的相同事件。
- 服務器現(xiàn)在支持session tokens,因此,快速重聯(lián)的功能可以按預期工作。
- 可以通過廣泛房間屬性創(chuàng)建房間后設置預期用戶/Setting Expected Users。
新增功能
- PlayerTTL和EmptyRoomTTL被添加為廣泛房間屬性,可以在房間創(chuàng)建后設置(或更改)。
- 房間標志/Room flags在房間創(chuàng)建時被添加。
- “
Delete Null Properties“:為空值的屬性將在服務器上被刪除。
- “
Broadcast Properties Change“:調(diào)用SetProperties的客戶端也將收到PropertiesChanged事件。 - “
SuppressPlayerInfo“:在加入過程中,我們將抑制獲取任何有關已加入用戶的信息的操作,但仍有可以通過GetProperties操作獲得這些信息,這個標志覆蓋了SuppressRoomEvents標志的值。 - “
CheckUserOnJoin“, “SuppressRoomEvents“, “PublishUserId” 和 “DeleteCacheOnLeave” (也叫 “CleanupCacheOnLeave“) 現(xiàn)在都是房間標志/room flags。用來請求參數(shù)或廣泛房間屬性。
- “
- 為
SQL大廳新增 “GetGameList“操作。 - 通過保護匹配過濾器(SQL查詢)免受SQL注入,為SQL大廳提供額外的安全性。
- 更多的性能計數(shù)器。在這里查看完整列表。
JoinRandomRoom允許你有多個 “連接的 “逗號分隔的SQL過濾器(最多三個)。JoinRandomRoom允許你在沒有找到匹配的情況下創(chuàng)建一個房間。
功能改變
v5中的認證應該在NameServer上完成,而不再是在MasterServer上。雖然目前在MasterServer上仍然可用,但我們將在未來將其廢棄。有了Steam、Facebook、Oculus和Vive作為NameServer上內(nèi)置的認證供應商,你就有了另一個理由把它移到那里。
其他調(diào)整
終止部分
- CounterPublisher已經(jīng)停用。其相關的源代碼和二進制文件(文件和配置)已從SDK中刪除。你可以使用Telegraf或Windows PerfMon代替。
- MMO項目。
- StarDust測試控制臺客戶端。
光子控制的變化
- “MMO演示 “實例子菜單移除。
- “運行TestClient(LoadBalancing)”從 “LoadBalancing(MyCloud)”子菜單中刪除。
- 添加了 “編輯 Nameserver.json “快捷方式。
相關資源