Photon 5의 새로운 사항
주요 변경 사항
NameServer
NameServer는 한동안 Photon Cloud에 존재했습니다.
v5에서 자체 호스팅 된 Photon Server로 가져오기로 했습니다.
클라이언트가 MasterServer로 전환하기 전에 먼저 연결해야 하는 LoadBalancing 인스턴스의 기본 애플리케이션으로 NameServer를 사용하는 것이 이제 Photon을 배포하는 기본 방법입니다.
NameServer는 배포된 다른 지역 또는 클러스터를 구성하는 데 유용합니다.
따라서 로드 밸런싱은 다른 수준에서 수행됩니다.
당사 기업 고객은 이 제품을 사용해왔고 높이 평가해 왔습니다.
빌트인 인증 제공자
v5의 NameServer에서 사용자 지정 인증은 이전에 Photon Cloud에서만 사용 가능했던 Facebook, Steam, Oculus 및 Vive의 네 가지 기본 제공자를 제공합니다.
이 기능은 기업 고객이 사용하고 선호하는 또 다른 기능이기도 합니다.
PhotonSocketServer
환경 구성 점검
환경 구성 시스템이 완전히 변경되었습니다.
이제 로딩, 분석과 바인딩은 .NET 코어의 환경 구성에 의존합니다
이제 서버 애플리케이션은 "Microsoft.Extensions.Configuration.Abstractions" NuGet 패키지가 필요하며 새로운 생성자를 통해 애플리케이션에 주입됩니다.
서버 시작 시에 PhotonServer.config 파일은 XML 구조 검사가 적용됩니다.
새로운 제한 사항
우리는 항상 데이터 전송 제한(메시지 크기, 버퍼 크기, 데이터 전송 속도)을 설정하기 위한 기본 설정(PhotonServer.config를 통해 구성)을 가지고 있었습니다.
따라서 Photon 서버에 보호 계층을 추가하기 위해 사용 제한을 정의하도록 미세 조정할 수 있는 새로운 설정을 추가했습니다.
MessageRate
: 초당 피어당 허용되는 최대 수신 메시지 수입니다.
Default is 5000.MessageDataRate
: 초당 피어당 허용되는 버퍼링 된 수신 데이터의 최대 크기입니다.
기본값은 2147483647 입니다(int.MaxValue
).MaxMessageSize
: 수신되는 메시지당 허용되는 최대 크기.
기본값은 512000입니다.
"관리되는 SocketServer 설정"에서 구성하는 방법에 대해서 더 많이 알아보세요.
직렬화 프로토콜 v1.8
서버는 이제 최신 클라이언트 SDK의 기본값이 되는 직렬화 프로토콜 버전 1.8을 지원합니다.
새로운 프로토콜은 가장 일반적으로 사용되는 유형에 대해 새롭고 최적화된 컴팩트한 데이터 전송 기술을 제공합니다.
보안 인증 설정
보안 리스너를 위한 인증서 형식 및 구성에서 보안 채널(Schannel)에서 OpenSSL로 전환했습니다.
여기에서 새로운 인증 설정 방법을 찾아볼 수 있습니다.
Photon Server v5는 이제 TLS 1.2 및 TLS 1.3을 지원합니다.
예약 연결 해제
v5에서는 연결을 예약하거나 지연하고, 클라이언트의 ConnectionState를 ScheduledForDisconnect로 설정하고, 연결을 끊기 전에 서버에 DisconnectMessage를 전송할 수 있는 기능을 추가했습니다. 기본 지연 값은 5000밀리초입니다.
또한 서버 접속을 끊어야 하는 이유가 더 많아졌고 접속이 끊기는 원인은 오류일 수 있습니다.
피어의 연결이 끊기도록 예약되면, 서버는 해당 피어에서 들어오는 모든 데이터를 삭제합니다.
32비트 지원 종료
PhotonSocketServer는 이제 64비트만 사용 가능합니다.
"deploy\bin_Win32" 는 사라졌습니다.
LoadBalancing
환경 구성 점검
구성 파일이 변경되어 각 애플리케이션마다 단순화된 새 구조체를 갖고 있는 자체 파일이 있습니다.
또한 플러그인 구성이 별도의 구성 파일로 이동되었습니다.
또한 HttpQueueSettings는 이제 별도의 섹션을 가지며 HttpQueue를 사용하는 섹션 내에서 구성할 수 있습니다.
신규 제한 사항
우리는 항상 LoadBalancing 서버 애플리케이션에 대해 몇 가지 기타 구성 가능한 제한이 있었습니다.
그러나 이것은 Photon Server를 악의적인 클라이언트나 해커의 공격이나 남용으로부터 보호하기에 충분하지 않은 것으로 보였습니다.
오퍼레이션 제한 사항
일반:
오퍼레이션 코드별 오퍼레이션 요청 및 파라미터 제한을 추가했습니다.
특수:
가장 일반적으로 사용되는 작업에는 참가, 생성 및 SetProperties와 같은 제한도 있습니다.
GameServer:
JoinGameRate
: 피어당 초당 최대 가입 요청 수입니다.CreateGameRate
: 피어당 초당 만들기 요청의 최대 수입니다.SetPropertiesRate
: 피어당 초당 SetProperties 요청의 최대 수입니다.
MasterServer:
MaxConcurrentJoinRequests
: 보류 중인 최대 요청 수(처리되지 않은 대기 중인 요청) 피어당 참가 작업 수입니다.MaxTotalJoinRequests
: 피어당 최대 참가 작업 수입니다.MaxJoinedGames
: 동일한 피어가 동시에 결합하는 최대 룸 수입니다.
HTTP 제한 사항
'일반' HTTP 대기열 설정 외에 LimitHttpResponseMaxSize
를 통해 수신 HTTP 응답의 페이로드 크기를 제한할 수 있습니다.
이는 사용자 지정 인증, WebRPC 또는 사용자 지정 플러그인(Webhook 포함)에 적용할 수 있습니다.
이벤트 캐시 제한 사항
SlicesCount
: 룸당 최대 이벤트 캐시 조각 수입니다.EventsCount
: 룸당 캐시 된 최대 이벤트 수(모든 액터 및 글로벌 캐시)입니다.ActorEventsCount
: 룸당 액터당 캐시 된 최대 이벤트 수입니다.
속성 제한 사항
GameServer:
MaxUniqPropertyKeysPerPeer
: 룸 당 액터당 고유 속성 키의 최대 수입니다.MaxPropertiesPerRequest
: SetProperties 요청 당 고유 속성의 최대 수입니다.MaxPropertiesSizePerGame
: 룸 당 모든 특성의 최대 총/합 크기입니다.MaxPropertiesSizePerRequest
: SetProperties 요청 당 단일 속성의 최대 크기입니다.
로비 제한 사항
MaxGamesOnJoin
: 클라이언트가 로비에 가입할 때 GameList 이벤트에서 전송된 최대 룸 목록 항목 수입니다.MaxGamesInUpdates
: GameListUpdate 이벤트에서 보낸 최대 룸 목록 항목 수입니다.MaxGamesInGetGamesListResponse
: GetGameList 요청에 따른 최대 SQL 룸 목록 항목 수입니다.Total
: 애플리케이션 당 최대 로비 수입니다.
.NET 대상
v6을 준비하기 위해 이 제품은 .NET 코어를 완전히 지원합니다. 서버 소스 코드의 .NET 프로젝트 스타일은 v45에서 변경되었고, 이에 대비하기 위해 빌드 파일을 추가하였습니다.
빌드 대상 구성(대상 빌드 출력 폴더 등)은 MSBuild 파일(csproj, csproj.includes)과 사용자 정의 및 매크로를 통해 처리됩니다.
"build\include" 폴더를 확인해 보세요.
빌드 흐름 및 배포 프로세스는 주로 "dotnet" 명령을 사용하여 수행됩니다.
그렇기 때문에 빌드하고 배포하려면 .NET 코어 런타임이 필요하지만 아직 빌드 대상을 지원하지는 않습니다.
그 외에는 타겟 .NET Framework 버전이 4.0에서 4.6.1로 업데이트되었습니다.
그러나 .NET 프레임워크 버전이 4.6.1 이상 버전을 빌드할 수 있습니다.
로컬 NuGet 저장소
v5 SDK에서는 서버 애플리케이션 개발에 사용되는 기본 라이브러리를 로컬 NuGet 패키지로 사용할 수 있습니다:
- ExitGamesLibs (ExitGamesLibs.dll)
- ExitGames.PhotonHostRuntimes (PhotonHostRuntimesInterfaces.dll)
- ExitGames.Logging (ExitGames.Logging.dll)
- ExitGames.Logging.Log4Net (ExitGames.Logging.Log4Net.dll)
SDK 폴더의 루트에 있는 "nuget.config" 및 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, 클라이언트가 마스터서버가 제공하고 인증 토큰에 암호화되어 있는 올바른 예상 GameServer에 연결하지 못했기 때문에 가입 작업이 실패했음을 의미합니다.
GameServer 설정 "TokenCheckExpectedHostAndGame"을 활성화가 필요합니다.ExpectedGameCheckFailure
: 32737, 클라이언트가 마스터서버가 제공하고 인증 토큰에 암호화되어 있는 올바른 예상 GameId/RoomName을 제공했기 때문에 가입 작업이 실패했음을 의미합니다.
GameServer 설정 "TokenCheckExpectedHostAndGame"을 활성화가 필요합니다.AuthRequestWaitTimeout
: 32736,에러 코드보다는 연결 해제 원인입니다.
피어가 서버에서 인증 없이 너무 오래 남아서 연결이 끊겼다는 의미입니다.
마스터 서버에서만 발생합니다.
제한 시간은 마스터 설정 "AuthTimeout"에서 설정할 수 있습니다.
기본값은 1200000ms(20분)입니다.ConnectionSwitch
: 32735, 에러 코드보다는 연결 해제 사유입니다.
연결이 끊긴 피어가 빠른 재가입(동일한 세션 토큰 사용)으로 인해 룸의 활성 액터와 바뀌었다는 의미입니다.ActorRemoved
: 32734, 에러 코드보다는 연결 해제 원인입니다.
해당 액터가 방에서 쫓겨났기 때문에 피어의 연결이 끊어졌다는 의미입니다.
기타 변경 사항
수정
- 이제 서버는 인증 작업의 결과로 예측대로 UserId를 리턴합니다.
클라이언트 또는 인증 공급자가 UserId를 설정하지 않은 경우 서버에 생성된 GUID가 리턴됩니다.
v4에서 서버는 이 경우 UserId를 리턴하지 않았습니다. - 또한 인증 확인 중에 인증 공급자가 닉네임을 설정하지 않은 경우 서버는 아무것도 리턴하지 않습니다.
v4에서 서버는 이 경우 null로 닉네임을 리턴했습니다. - 서버가 동일한 액터를 동일한 관심 그룹에 여러 번 추가하는 것을 허용하지 않습니다.
이것은 v4에서도 가능했고, 그 액터가 관심 그룹에 보낸 동일한 이벤트를 여러 번 받는 결과를 낳았습니다. - 서버가 이제 세션 토큰을 지원하므로 빠른 다시 가입 기능이 예상대로 작동합니다.
- 잘 알려진 룸 속성을 통해 룸을 작성한 후 예상 사용자를 설정합니다.
새로운 사항
- PlayerTTL 과 EmptyRoomTTL이 룸 생성 후에 설정(또는 변경) 할 수 있는 잘 알려진 룸 속성에 추가되었습니다.
- 룸 플래그가 룸 생성 시에 추가되었습니다:
- "Delete Null Properties": null 값을 가진 속성들은 서버에서 삭제됩니다.
- "Broadcast Properties Change": SetProperties를 호출하는 클라이언트도 PropertiesChanged 이벤트를 수신합니다.
- "SuppressPlayerInfo": 가입 프로세스 중에 가입된 사용자에 대한 모든 정보를 가져오는 것을 금지하지만 GetProperties 작업을 사용하여 이 정보를 가져올 수 있습니다. 이 플래그는 SuppressRoomEvents 플래그의 값을 재정의합니다.
- "CheckUserOnJoin", "SuppressRoomEvents", "PublishUserId" 및 "DeleteCacheOnLeave" ("CleanupCacheOnLeave"로도 함)은 이제 룸 속성입니다.
요청 파라미터 또는 잘 알려진 룸 특성으로 사용됩니다.
- SQL 로비용의 새로운 "GetGameList" 오퍼레이션.
- SQL 인젝션으로부터 매치메이킹 필터를 보호하여 SQL 로비에 대한 보안을 강화(SQL 쿼리)
- 더 많은 성능 카운터.
여기에서 더 리스트를 확인하세요. - JoinRandomRoom을 사용하면 여러 개의 "체인 된" 쉼표로 구분된 SQL 필터(최대 3개)를 사용할 수 있습니다.
- JoinRandomRoom 매칭되는 것이 없으면 룸을 생성할 수 있도록 허용합니다.
변경 사항
- v5의 인증은 NameServer에서 수행되어야 하며 더 이상 MasterServer에서 수행되지 않습니다.
MasterServer에서 계속 사용할 수 있지만, 앞으로는 더 이상 사용하지 않을 것입니다. NameServer에 내장된 인증 공급자로 Steam, Facebook, Oculus 및 Vive를 사용하는 것은 이러한 서비스를 이동해야 하는 또 다른 이유입니다.
기타 변경 사항
만료
- CounterPublisher는 더 이상 사용되지 않습니다.
이에 관련된 소스와 바이너리 (파일과 환경 구성)은 SDK 에서 제거되었습니다.
이 대신에 Telegraf 또는 Windows PerfMon을 사용할 수 있습니다. - MMO 프로젝트.
- StarDust 테스트 콘솔 클라이언트.
Photon Control 변경사항
- "MMO Demo" 인스턴스 서브메뉴가 제거되었습니다.
- "Run TestClient (LoadBalancing"가 "LoadBalancing (MyCloud)" 서브 메뉴에서 제거되었습니다).
- "Edit Nameserver.json" 바로 가기가 추가되었습니다.