server | v3 switch to v4  

Photon 3 새로운 사항

1. 고성능 S2S API (Native/C++) 얼마전에 표준 클라이언트 라이브러리보다 서버 대 서버 통신에 더 적합한 매니지드 클래스인 TCPClient를 도입하였습니다. TCPClient 에는 두 가지 좋지않은점이 있습니다: 첫번째는 두 연결의 끝단 프로그래밍 모델들이 상이 하다는 것(한쪽은 TCPClient 인 반면 다른쪽은 Peer 임)이고 두번째는 낮은 대역폭으로 설계되었다는 것 입니다. 이 릴리즈에서는 Photon 은 강력한 Photon 코어의 네트워크 기능을 이용하여 다른 Photon 인스턴스들과의 연결을 설정할 수 있으며 연결 양측에서 동일한 프로그래밍 모델인 Peer를 이용할 수 있도록 하였습니다.

2. 로드 밸런싱 Photon 로드 밸런싱으로 개발자들은 확장할 수 있는 멀티-노트 솔루션을 생성할 수 있습니다. 바로 사용할 수 있는 로비를 호스팅 하는 마스터 서버와 진행중인 게임들을 호스트하는 게임서버가 포함되어 있습니다. Lite 로비 어플리케이션에는 매치메이킹 메소드와(신규 게임 생성시에)부하를 분산시켜주는 로드밸런싱 컴포넌트가 들어 있습니다.

3. 이벤트 캐싱 지금까지 Lite 에는 나중에 참여한 플레이어들에게 값을 전달하기 위해 룸과 액터들의 "속성"들에 값을 저장하고 있었습니다. 훌륭한 아이디어이긴하나 사용하기에는 약간 세련되지는 않았습니다:

무엇인가를 저장해야 한다면 프로퍼티를 설정해야만 했습니다. 이외 다른 경우에는 이벤트를 전송합니다.

새로운 Lite 어플리케이션에서는 두 사항을 합쳐 이벤트에 대한 캐싱을 할 수 있습니다. 플레이어와 이벤트마다 값들을 캐시할 수 있습니다. 누군가가 참여하면 이벤트들이 발생된 것 처럼 즉시 보내집니다.

4. 확장 데이터 타입 지원 이제 Photon이 이전보다 더 많은 데이터 타입을 지원 합니다: Null 값, 딕셔너리, 객체들의 배열(각각 자신만의 타입이 있음) 과 커스텀 클래스까지 통합되고 이벤트에서 사용할 수 있습니다.

5. Peer 의 새로운 프로퍼티들 NetworkProtocol, LocalIP, LocalPort.

6. 지금까지는 전역 디폴트 어플리케이션을 설정했었습니다.. 이제 리스너별로 디폴트 어플리케이션을 정의할 수 있습니다.

변경

1. Lite 와 Lite 로비 코드-정리 Event-, Operation- 과 Parameter-코드들이 정리되었습니다. 모든 것이 재지정되었고 사전 정의된 코드들이 사라졌으며 기존값과 신규값을 나열한 또 다른 페이지가 있습니다.

2. 코드들의 타입 코드에 대해서 바이트 타입을 유지하기로 결정했습니다. 효율적이고 필요없는 부분은 제거하였습니다. 필요하면 모든 오퍼레이션과 이벤트는 서브-코드들을 얻을 수 있습니다(출시된것에는 지원되지 않습니다).

오퍼레이션의 ReturnCode 는 int 타입 입니다. 이제는 short 타입 입니다. 크게 줄어들지는 않았으나 짧아졌습니다.

3. 프로토콜 정리 Photon 3 의 프로토콜을 정리했습니다. 눈에 보이지는 않지만 몇가지 장점이 있습니다. 우선 새로운 프로토콜은 어떤한 코드도 하드코딩되어 있지 않습니다. 오퍼레이션, 결과, 파라미터 또는 이벤트들의 어떠한 코드도 코드에 의해서 정의될 수 있습니다.

4. 에러 처리 에러 처리는 다음과 같이 재설계되었습니다.

  • 처리되지 않은 예외 이벤트 핸들러를 항상 호출 합니다
  • 로깅 퍼사다 초기화가 더 이상 필요하지 않습니다
  • 처리되지 않은 예외에 대한 3개의 정책을 도입했습니다: 무시,어플리케이션 재시작, 프로세스 종료.
  • 일관된 동작: Photon 이 제어하는 스레드내의 처리되지 않은 예외들이 로그되고 무시되기전애 일반적으로 다른 스레드에서 프로세스가 종료됩니다. 노트: 2.6 에서의 버그로 인하여 일부 예외들은 ThreadAbortException 또는 어플리케이션의 재로드없이 로드되지 않는 "변형"이 발생됩니다. (2.6.28 에서 수정되었습니다) 5. Server SDK 변경사항 (breaking)

  • Peer 클래스들은 'PeerBase' 에서 상속을 받아야 합니다. 이전의 인터페이스 IPeer 와 PhotonPeer 클래스가 제거 되었습니다. PeerBase 클래스는 어플리케이션에서 중요한 부분이기 때문에 정의를 잘 살펴보세요.

  • 어플리케이션들은 이제 'ApplicationBase' 클래스에서 상속을 받아야 합니다.
  • ResponseParameterAttribute, RequestParameterAttributeEventParameterAttribute 클래스들은 DataMemberAttribute 클래스로 대체되었습니다. 이 영향으로 더 이상 요청과 응답 파라미터들이 동일한 컨테이너 클래스의 부분이 아닙니다.
  • 클래스들의 Params 프로퍼티들 EventData, OperationRequestOperatioResponse 는 새로운 프로퍼티인 Parameters 로 대체되었습니다. 이것은 딕셔너리 키들로서 byte 타입입니다.
  • EventData.EventCode 프로퍼티는 'Code' 로 이름이 변경되었으며 타입이 byte 로 변경되었습니다.
  • OperationRequest.OperationCode 프로퍼티의 타입과 OperationResponse.OperationCode 의 타입이 byte 로 변경되었습니다.
  • 새로운 DataContract 클래스는 OperationEvent 클래스를 대체합니다. 클래스 오퍼레이션은 프레임워크의 일부분으로 남아 있긴 하지만 더이상 파라미터들을 클래스 프로퍼티로 변환하기 위해서 필수적으로 사용되지 않습니다.
  • Event.GetEventDataOperation.GetOperationResponse 메소드가 제거 되었습니다. 대신 새로운 메소드인 OperationResponseEventData 생성자들을 사용합니다.
  • PhotonPeer.SendBufferFull 이 제거되었습니다. 가득찬 전송 버퍼에 응답하기위해서 PeerBase.OnSendBufferFull 를 오버라이드합니다. Photon이 더 많은 데이터를 전송 할 준비가 되면 대신 PeerBase.OnSendBufferEmpty 이 호출됩니다.

6. 클라이언트 SDK 변경사항 (breaking)

  • IPhotonListener 인터페이스 멤버 OperationResultOnOperationResponse 으로 EventAcionOnEventPeerStatusCallbackOnStatusChanged 으로 이름이 변경되었습니다.
  • 이전 OperationResult (OperationCode, Parameters, ...) 의 다른 파라미터들이 하나의 객체 OperationResponse 로 전달 됩니다. 동일하게 OnEvent 도 하나의 파라미터만 있습니다. EventData.
  • Invocation ID 지원이 제거 되었습니다.

    1. 설정 파일에서 PhotonHostRuntime 버전 속성이 제거되었으며 더이상 필요하지 않습니다 - 쉬운 업데이트를 위해서 제거하는 것을 권고 합니다.
    2. NetSyncObjects 어플리케이션은 SDK 에 포함되어 있지 않습니다.
    3. 덤프 파일의 기본값이 mini 에서 full 로 변경되었습니다.
    4. 시작시 로그파일에 버전값 추가.

Back To Top

버그 수정

  1. 파이버상에서 예정된 작업을 취소 할 때 메모리 누수 수정
  2. S2S.TCPClient 가 연결 해제된 소켓을 닫지 않아 다시 Connect 호출시 오류발생
  3. 플래시 정팩 파일이 최상위-레벨 XML 태그로 잘못 됨 https://www.adobe.com/devnet/flashplayer/articles/fplayer9_security.html#_Malformed_Policy_Files 참조
  4. CLR 이 GC 서버가 사용되는지 확인하여 시작 (.net 4.0 에만 영향을 받음).
  5. ENet 프래그먼트된 버퍼링 흐름 제어 버그 수정.
  6. TCP 매직 바이트 이슈 수정 - 올바르게 파싱되지 않은 프래그먼트된 핑 패킷의 크기 내부 처리 이슈가 파싱 오류가 될 수 있는 사항 수정 (패킷이 크고 더 많은 부하).
  7. 데드 로깅 인스턴스에 로그를 기록하려는 시도로 인한 셧다운시 Photon 행(hang) 수정.
  8. Peer GetRemoteAddress 메소드 수정- 일부 경우에 있어서 캐싱이 잘못되는 이슈 수정
  9. mini 덤프 수정 - 설정된 제한 준수.
  10. 캐시된 포트에 의존하지 않음으로 인한PhotonPeer::GetRemotePort 변경.

기술문서 TOP으로 돌아가기