PUN vs. Bolt
소개
PUN과 Photon 볼트는 두 개의 강력한 게임 네트워킹 미들웨어 입니다.
두개중 어떤 것을 선택하는 것은 쉽지는 않습니다.
이 문서의 목표는 이 두개의 툴에서 개발자가 요구사항에 가장 적합한 것을 결정하는 데 도움이 될 수 있도록 이해를 하기 위한 요약된 비교를 제공하는 것입니다.
PUN
PUN (Photon Unity Networking)은 원시 유니티 네트워킹 API의 복제판으로 신뢰할 수 있는 Photon 인프라구조로 강화된 것 입니다.
어디에나 있는 매치메이킹 이외에, PUN 기본 빌딩 블록은 다음과 같습니다 : 게임 오브젝트 상태의 직렬화 (트랜스폼 등의 빌트인 지원); 그리고 원격 프로 시저 호출(RPC) 입니다.
PUN은 개발자에게 송/수신 할 대상을 직접적이고 완벽하게 제어 할 수 있게 해주며, 룸 릴레이 통신 모델과 같은 유연한 멀티 캐스트로 묶여진 강력한 게임 네트워킹 도구입니다.
Photon 볼트
Photon 볼트는 데이터 구조 집합(볼트 에셋이라고 부름: 상태, 객체, 이벤트와 명령어)을 통하여 개발자가 네트워크 가능한 게임상태를 정의할 수 있도록 하고, 이러한 자산을 게임 오브젝트 프리팹에 연결 해 주는 상위 수준의 API입니다.
이벤트와 명령의 콜백과 트리거링으로 강화 된 볼트의 네트워킹 모델은 개발자가 최소한의 노력으로 효율적인 압축, 클라이언트측 예측 및 지연이 보정된 레이캐스트를 유니티에 제공합니다.
빠른 비교
PUN/PUN+ 와 Bolt 네트워킹 비교
PUN/ PUN+ | Bolt | ||
---|---|---|---|
CCU cost |
PUN: 20 무료 CCU PUN+: $90 1회성 = 60개월 동안 CCU 100 무료 |
무료 | |
호스팅 서비스 | Photon Cloud, Photon Enterprise Cloud | Photon Squad | |
P2P | |||
클라이언트/서버 | |||
Punchthrough | (not needed) | ||
Bit compression | |||
Lag compensation | |||
Platforms (WebGL 미포함) | 대부분의 플랫폼 |
모든 메이저 플랫폼 XB1, PS4 |
|
Authorative Server | (Photon On-Premises) | ||
커스텀 인증 | (not built-in) | ||
Webhooks 과 WebRPC | |||
Server Plugins | (Enterprise Cloud only) | ||
Steam integration | |||
마스터 서버 | (Zeus) | ||
자동화 메카님 네트워킹 | |||
Playmaker 통합 | (partial) | ||
Unity Networking 호환 | (Old Unity Networking only) | ||
Unity 4 FREE: Web, Standalone | |||
Unity 4 FREE: iOS, Android | (PUN+ required) | ||
Unity 5 | |||
호스트 마이그레이션 | (not built-in) | ||
Matchmaking (Room 과 Lobby 지원) | |||
Player 서비스 품질(QoS) |
기능 비교
Photon 볼트와 PUN 모두 장점과 이유가 있습니다.
여기서 우리는 게임 네트워킹의 유사한 영역에 영향을 미치는 각각의 개별 기능을 비교하여 둘 사이의 중요 차이점에 대해서 설명하겠습니다.
호스트 클라이언트 (볼트) vs. 전용 서버 (PUN)
PUN을 통해 연결 할 수 있고 룸이 실제로 존재하는 실제의 전용서버를 이미 경험했습니다.
룸을 생성하는 클라이언트는 룸에 처음 참여하는 클라이언트입니다.
룸에 참여한 모든 사람이 알 수 있도록 룸을 생성한 클라이언트는 마스터 클라이언트로 표기됩니다.
마스터 클라이언트는 호스트도 아니며 서버도 아니지만 추가적인 사항을 처리하는 특별한 클라이언트 입니다.(가상-권한 서버)
볼트에서는, 볼트 클라이언트 중 한 클라이언트는 서버 역할을 해야 합니다. 진정한 전용 서버 또는 실제 호스트입니다.
혼란스러울수가 있는데, 정리해 보도록 하겠습니다:
- PUN에서 마스터 클라이언트가 종료하는 경우 다른 액터 -사용할 수 있는- 가 새로운 마스터 클라이어트가 됩니다.
이 사항은 더 이상의 클라이언트가 없을 때 까지 계속됩니다. - 반면, 볼트에서 서버는 "고정"입니다. "클라이언트"는 게임을 시작하고 서버가 되는 것을 선택하면 서버가 됩니다.
만약 호스트 클라이언트(서버)가 종료하면 서버가 되는 클라이언트는 없습니다(그리고 당연히 모든 클라이언트의 연결이 끊어지게 됩니다).
요약을하면 볼트에서 호스트가 게임을 끊게되면 게임은 끝나게 됩니다.
핑과 지연은 호스팅한 플레이어의 연결에 따라 달라지게 됩니다.
이벤트 (Bolt) vs. RPCs (PUN)
PUN (그리고 유니티용 많은 다른 네트워킹 솔루션)과 볼트의 주목할 만한 차이점은 볼트에는 RPC 또는 ''원격 프로시져 호출'' 에 대한 개념이 없다는 것 입니다.
PUN에서, 그리고 RPC는 "이 메소드를 지금 실행시켜 줘" 라는 것을 선택한 또는 모든 클라이언트에게 말하는 방식 입니다.
한편 볼트는 ''이벤트''를 사용하여 동일한 기능을 수행합니다.
자동 상태 복제 (볼트) vs. 유연성 (PUN)
볼트에서는 직렬화 코드를 작성할 필요가 없습니다.
모든 것은 게임 상태를 나타내기 위해 생성한 에셋에 기반하여 볼트 컴파일러가 생성해줍니다.
이는 시간을 크게 절약 할 수 있으며 압축과 같은 다른 기능을 즉시 사용할 수 있다는 것을 말합니다.
하지만 이 사항은 네트워크로 이동하는 방식과 방법을 완전하게 제어 할 수 없음을 의미합니다.
PUN에서는 전송 내용과 수신 내용을 결정하여 나만의 직렬화 루틴을 작성할 수 있습니다.
이 방법으로 사용자 정의 추측 항법 함수를 작성하고 나만의 코드로 어떤 클라이언트가 정보를 수신할지 결정할 수 있습니다.
비트 압축 (Bolt) vs. 메시지 효율성 (PUN)
볼트 코드 생성은 객체 상태 직렬화를 처리하기 때문에 최신 압축 기술을 이용할 수 있습니다. 따라서 복잡한 게임상태를 네트워킹하기 위한 트래픽을 크게 줄일 수 있습니다.
그러나 릴레이를 통해 게임을 실행하고 권한 서버 로직을 사용하지 않는 경우에도 볼트의 메시지는 항상 호스팅 머신을 통과해야합니다.
이로인하여 볼트 기반 게임은 약간의 지연이 발생합니다.
PUN은 직렬화 코드가 기본적으로 (마스터 클라이언트를 거치지 않고) 릴레이를 통해 클라이언트에서 다른 모든 피어로 데이터를 전송하므로 이러한 지연은 없습니다.
PUN에 대한 이슈는 개발자가 자신의 직렬화 코드를 작성하기 때문에 최신 압축 기술을 사용할 수 없다는 것입니다(프로그래머가 직접 구현해야 할 수도 있습니다).
클라이언트 측 예측 & 지연 보상 (볼트) vs. 라이트 권한-서버 가능성 (PUN)
일반적으로 부정 행위를 피하기 위해 권한 서버 코드를 작성하는 것은 모든 게임 네트워크 개발자가 수시로 직면하게 되는 것입니다.
즉, 서버가 클라이언트에의 입력을 제어하도록 하고 필요한 경우 클라이언트로 다시 보내는 데이터를 수정할 수 있습니다.
볼트는 내장된 클라이언트측 예측 아키텍처 (명령 + 응답) 및 지연 보상 슈터 우선 레이 캐스트 (대략적인 서버-시간 히트 박스 버퍼 기반)를 통해 권한 서버 게임의 구현을 크게 단순화 시켜줍니다.
이 의미는 개발자가 FPS 및 액션 게임에서 수년간의 업계 경험을 통해 잘 이해할 수 있는 API를 사용하여 자동으로 혜택을 받게되는 것을 의미합니다.
이러한 완전 권한(때로는 전용)서버 접근 방식의 문제점은 비용입니다.
고성능 CPU를 사용하여 게임일 렌더링도 할 수 있는 완전한 시뮬레이션 적재를 하는 호스팅 서버는 경제적으로 비실용적입니다.
PUN을 사용하면 클라이언트의 모든 사용자 지정 직렬화 메시지에 1 대 1로 일치하는 서버측 플러그인을 작성 할 수 있습니다. 다른 사용자들에게 전달되는 이 메시지는 가로채지거나, 차단되거나 변경 될 수 있습니다.
이것은 Photon 서버 자체에 필요한 최소 로직만을 구현하는 매우 유연한 API로, 서버 비용을 보다 더 유연하게 조정할 수 있습니다.
볼트의 메시지 패킹과 압축 (그 자체로 유익함)은 불가능하지는 않더라도 그런 접근법을 비현실적으로 만듭니다.
이론상으로는 마스터 클라이언트를 기반으로 서버 플러그인이 없이 PUN을 사용하여 가상 권한 기능을 구현할 수 있습니다.
이를 위해서는 마스터 클라이언트 (그리고 모든 마스터 클라이언트 후보자)가 각 클라이언트의 100% 실제 상태를 유지해야하므로 까다롭습니다.
볼트는 정확하게 클라이언트 상태를 도입하여 이를 해결합니다.
FPS 게임에서, 전형적인 "플레이어 상태" 에는 각 플레이어의 위치, 속도, 카메라 높이등의 정보가 담겨져 있을 것 입니다.
볼트에서는 이러한 상태들은 사용자가 쉽게 사용할 수 있고 입력 오류가 발생하지 않도록 볼트 자체의 유니티 편집기 확장판에 정의되어 있습니다.
볼트는 각 클라이언트의 실제 상태를 담당하는 서버와 함께 네트워크를 통해 상태를 동기화해주어 부정 행위를 저지합니다.