What's new in Photon 5
主要更改
NameServer
NameServer在Photon Cloud上已經存在了一段時間。
我們決定在v5中把它帶到自營的Photon伺服器上。
使用NameServer作為LoadBalancing實例的默認應用,在切換到MasterServer之前,客戶應該首先連接到NameServer,這是現在部署Photon的首選方式。
NameServer對於配置不同的部署區域或集群非常有用。
因此,負載平衡是在另一個層上完成的。
這一點已經被我們的企業客戶所使用,並得到了贊賞。
內置認証供應商
NameServer上的自定義認証帶來了四個開箱即用的供應商,以前只在Photon Cloud 上可用:Facebook、Steam、Oculus和Vive。
這也是我們的企業客戶所使用和贊賞的另一項功能。
PhotonSocketServer
配置修正
配置系統已經完全改變。
它現在依靠.NET核心的配置提供者進行加載、解析和綁定。
服務器應用程序現在需要 "Microsoft.Extensions.Configuration.Abstractions "NuGet包,以便使用 "Microsoft.Extensions.Configuration.IConfiguration"接口,該接口將通過一個新的建構器載入應用程序。
PhotonServer.config文件現在在服務器啟動時也具有XML模式驗証功能。
新的限制條件
我們一直都有本地設置(通過PhotonServer.config配置)來設置數據傳輸限制(消息大小、緩沖區大小、數據傳輸率)。
因此,為了給Photon服務器增加一層保護,我們引入了新的設置,您可以通過微調來定義使用限制。
MessageRate
:每個對象每秒允許的最大傳入信息數量。
默認值為5000。MessageDataRate
:允許每個對象每秒緩沖傳入數據的最大尺寸。
默認為2147483647(int.MaxValue
)。MaxMessageSize
: 允許傳入信息的最大容量。
默認為512000。
請閱讀"管理的SocketServer設置 "中關於如何配置這些內容的更多信息。
序列化協議 v1.8
服務器現在支持1.8版本的序列化協議,這應該是最新客戶端SDK的默認版本。
新協議為最常用的類型帶來了新的優化和緊湊的數據傳輸技術。
安全認證設置
在安全認證格式和配置方面,我們已經從安全通道(Schannel)轉換為OpenSSL。
你可以找到設置証書的新方法按此。
Photon伺服器v5現在也支持TLS 1.2和TLS 1.3。
預定斷開連接
在v5中,我們增加了一種安排或延遲斷開連接的方法,將客戶端的ConnectionState設置為ScheduledForDisconnect,並讓伺服器能夠在斷開連接前向客戶端發送DisconnectMessage。默認的延遲是5000毫秒。
同時伺服器有更多的理由斷開服務器的連接,斷開原因可能是一個錯誤。
當一個對象被安排斷開連接時,服務器將捨棄從該對象傳入的任何數據。
結束支援對32位元
PhotonSocketServer現在只提供64位元。
"deploy\bin_Win32 "已經消失。
LoadBalancing
配置修正
配置文件已被修改,因此每個應用程序都有自己的文件,並採用了簡化的新結構。
插件的配置也移到了它自己單獨的配置文件中。
此外,HttpQueueSettings現在有了自己獨立的部分,並且可以在使用HttpQueue的部分中進行配置。
新的限制條件
對於LoadBalancing伺服器應用程序,我們總是有一些其他的的可配置限制。
但這似乎還不足以保護Photon服務器免受惡意客戶或黑客的攻擊或濫用。
操作限制
Generic:
我們為每個操作代碼增加了操作請求和參數限制。
Specific:
對於最常用的操作也有一些限制:加入、創建和屬性設定。
GameServer:
JoinGameRate
:每個對象每秒最大的加入請求數。CreateGameRate
:每個對象每秒最大的創建請求數。SetPropertiesRate
:每個對象每秒最大的屬性設定請求數。
MasterServer:
MaxConcurrentJoinRequests
:每個對象的最大待處理(排隊未處理的請求)聯合操作數。MaxTotalJoinRequests
:每個對象的最大加入操作總數。MaxJoinedGames
:同一個對象同時加入的房間的最大數量。
HTTP限制
除了 '常規' 的HTTP隊列設置外,你可以通過LimitHttpResponseMaxSize
來限制傳入HTTP的有效載荷大小。
這可以應用於自定義認証、WebRPCs或自定義插件(包括Webhooks)。
事件緩存限制
SlicesCount
:每個房間的事件緩存的最大數量。EventsCount
:每個房間的最大事件緩存數量(所有actors和全局緩存)。ActorEventsCount
:每個房間每個actors的最大緩存事件數。
屬性限制
GameServer:
MaxUniqPropertyKeysPerPeer
: 每個actors在每個房間的最大不同屬性鍵數量。MaxPropertiesPerRequest
:每個屬性設定請求的最大不同屬性數量。MaxPropertiesSizePerGame
:每個房間所有屬性的最大總/和尺寸。MaxPropertiesSizePerRequest
:每個屬性設定請求的任何單一屬性的最大尺寸。
大廳限制
MaxGamesOnJoin
:當客戶加入大廳時,在GameList事件中發送的房間列表條目的最大數量。- MaxGamesInUpdates`:在GameListUpdate事件中發送的房間列表條目的最大數量。
- MaxGamesInGetGamesListResponse`:作為GetGameList請求的結果,SQL房間列表條目的最大數量。
Total
:每個應用程序的最大大廳數量。
.NET目標
為了完全支持.NET核心的v6,伺服器源代碼的.NET項目在v5中發生了變化,我們增加了構建文件。
構建目標配置(還有目標構建輸出文件夾等)是通過MSBuild文件(csproj,csproj.includes)和自定義定義來處理的。
參見 "build/include "文件夾。
構建流程和部署過程主要通過 "dotnet "命令完成。
這就是為什麼需要安裝.NET Core運行時才能構建和部署,即使.NET Core不是一個支持構建的目標。
除此之外,目標.NET框架版本從4.0更新到4.6.1。
但您可以為高於4.6.1的.NET框架版本進行構建。
本地NuGet存儲庫
在v5 SDK中,用於伺服器應用程序開發的主要資料庫在可以作為本地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"。
更新的反饋控制系統(LoadBalancer)
LoadBalancer使用的反饋控制系統得到了增強。
它現在包含雙倍的反饋級別(過去是5級,現在是10級)。
我們也引入了優先級和儲備。
新的服務器錯誤代碼
HttpLimitReached
: 32745,這表示HTTP請求失敗,因為已經達到了限制。ExternalHttpCallFailed
: 32744, 這表示HTTP請求由於與目標網絡服務相關的問題而失敗。OperationLimitReached
: 32743, 這表示操作被阻止了,因為已經達到了限制。- SlotError`: 32742, 這表示更新預期用戶時出現了錯誤。
SecureConnectionRequired
: 32740, 這表示對象被斷開,因為服務器要求安全連接,這一點通過LoadBalancing部分的 "RequireSecureConnection "設置啟用。- EventCacheExceeded`: 32739,這表示事件緩存被取消,因為已經達到了極限。
ExpectedGSCheckFailure
: 32738,這表示加入操作失敗,因為客戶端沒有連接到由主伺服器提供並在授權認證中加密的正確預期遊戲伺服器。
這需要遊戲伺服器 "TokenCheckExpectedHostAndGame "被啟用。ExpectedGameCheckFailure
: 32737,這表示加入操作失敗,因為客戶端沒有提供正確的預期GameId/RoomName,由MasterServer提供並在授權認證中加密。
這需要游戲服務器設置 "TokenCheckExpectedHostAndGame "被啟用。AuthRequestWaitTimeout
: 32736,這是一個斷開的原因,不是一個錯誤代碼。
這表示對象被斷開連接,因為它在服務器上沒被認証的時間過長。
只發生在主服務器上。
超時時間可以在主服務器設置 "AuthTimeout "中設置。
默認是1200000毫秒(20分鐘)。ConnectionSwitch
: 32735,這是一個斷開原因,不是一個錯誤代碼。
表示斷開連接的對象因為快速重合(使用相同的會話認證)而被換成了房間裡的actor。ActorRemoved
: 32734,這是一個斷開原因,不是一個錯誤代碼。
表示對象被斷開,因為相應的actor被從房間中移除。
其他更改
修正
- 伺服器現在按照預期,在所有情況下,作為認証操作的結果,返回UserId。
如果客戶端或認証提供者沒有設置UserId,將返回伺服器上生成的GUID。
在第四版中,伺服器在這種情況下不返回UserId。 - 另外,在認証過程中,如果Nickname沒有被認証提供者設置,伺服器將不會返回任何項目。
在v4中,伺服器在這種情況下會返回一個空的Nickname。 - 伺服器現在不允許同一個actor多次被添加到同一個小組中。
在第四版中,這是有可能的,它導致了多次該角色發送到該小組的相同事件。 - Ther伺服器現在支持會話認證,因此,快速重新加入的功能可以按預期工作。
- 在通過所知的房間屬性創建房間後設置預期用戶。
新增
- PlayerTTL和EmptyRoomTTL被添加為知名的房間屬性,可以在房間創建後設置(或更改)。
- 房間標誌在房間創建時被添加。
- "Delete Null Properties":空值的屬性將在伺服器上被刪除。
- "Broadcast Properties Change":調用設置屬性的客戶端也將收到屬性更改事件。
- "SuppressPlayerInfo":在加入過程中,我們抑制獲得任何有關加入用戶的信息,但仍有可能通過獲得屬性操作獲得這些信息,這個標誌覆蓋了SuppressRoomEvents標誌。
- "CheckUserOnJoin", "SuppressRoomEvents", "PublishUserId" 和 "DeleteCacheOnLeave" (也叫 "CleanupCacheOnLeave") 現在都是房間標誌。
以前是請求參數或所知的房間屬性。
- 為SQL大廳新增 "GetGameList "操作。
- 通過保護匹配過濾器(SQL查詢)免受SQL載入,為SQL大廳提供額外的安全性。
- 更多的性能計數器。
在這裡找到它們的列表。 - JoinRandomRoom允許您有多個 "chained"的逗號分隔的SQL過濾器(最多三個)。
- JoinRandomRoom允許您在沒有找到匹配的情況下創建一個房間。
更改
- v5中的認証應該在NameServer上完成,而不再是在MasterServer上。
雖然在MasterServer上仍然可以使用,但我們將在未來廢除這種做法。有了Steam、Facebook、Oculus和Vive作為NameServer上內置的認証供應商,您就多了另一個把它移到那裡的理由。
其他更改
停用
- CounterPublisher已經停用。
它的相關源代碼和二進制文件(文件和配置)已從SDK中刪除。
你可以使用Telegraf或Windows PerfMon代替。 - MMO項目。
- StarDust測試控制台客戶端。
Photon Control 更改
- "MMO Demo"事件列表被刪除。
- "Run TestClient (LoadBalancing)" 從 "LoadBalancing (MyCloud) "子列表中刪除。
- 新增了"Edit Nameserver.json"快捷方式。