Skip to main content

전송 동작 구성

PlayFab Party의 네트워킹 기능은 네이티브 플랫폼의 UDP(User Datagram Protocol) 기능을 확장하여 실시간 멀티플레이어 게임에 이상적인 데이터그램 전송 기능을 제공합니다. TCP(Transmission Control Protocol)는 신뢰할 수 있는 스트림을 제공하고 UDP는 신뢰할 수 없는 데이터그램을 제공하지만, 데이터그램마다 Party의 네트워킹 동작을 구성할 수 있습니다. PartyLocalEndpoint::SendMessage를 사용하여 로컬 Party 엔드포인트에서 원격 엔드포인트로 데이터그램을 전송할 때, 원하는 전송 동작을 미세 조정하기 위해 PartySendMessageOptions을 지정합니다. 기능은 다음과 같습니다.
  • 보장된 배달: GuaranteedDelivery 플래그는 메시지가 모든 대상에 도착하도록 보장하며, 환경적 패킷 손실을 완화하기 위해 필요할 때 암묵적으로 데이터를 재전송합니다. 이 옵션 플래그는 항상 대상에 도달해야 하는 중요한 상태 정보를 보낼 때 잘 작동하거나, 그렇지 않으면 대상이 네트워크에서 제거되어야 합니다. 기본 옵션은 UDP와 같은 fire-and-forget 동작을 제공하는 BestEffortDelivery입니다.
  • 순차 배달: 이 로컬 엔드포인트에서 대상 엔드포인트로 순차적으로 전송된 다른 메시지에 대해 메시지 배달 순서를 지정합니다. 특정 순서로 대상에 도달해야 하는 상태 정보를 보낼 때 이 옵션 플래그를 사용합니다. 순차 배달은 환경에 의한 패킷 손실이나 순서 변경이 있을 때 약간 낮은 네트워크 효율성과 모든 패킷을 수신하기 위한 더 긴 대기 시간을 초래할 수 있습니다. SequentialDeliveryGuaranteedDelivery와 함께 사용하면 이전에 전송된 순차 메시지가 도착하기를 기다리는 동안 메시지가 대상 엔드포인트에서 큐잉될 수 있습니다. 큐잉은 환경적 패킷 손실이나 순서 변경 중에 인지되는 지연 시간을 증가시킬 수 있지만, 대상 엔드포인트는 항상 전송된 순서대로 모든 메시지를 봅니다. 이러한 성능 트레이드오프는 TCP와 유사한 프로토콜에 공통적이며 때로는 헤드 오브 라인 차단이라고 합니다.
  • 결합: Party 라이브러리는 환경에서 지원하는 최대 크기를 초과하는 큰 메시지를 자동으로 조각화하고 다시 조립하므로, 호출자는 조각화를 관리할 필요가 없습니다. 많은 작은 데이터그램을 전송하는 경우, 결합은 이들을 단일 패킷으로 결합하여 지연 시간이 늘어날 수 있는 대신 대역폭 효율성을 향상시킵니다. CoalesceOpportunistically 플래그(기본값)로 전송하면 사용 가능한 다른 큐잉된 메시지와 함께 메시지를 결합하지만, 메시지가 즉시 전송될 수 있다면 더 이상 기다리지 않습니다. AlwaysCoalesceUntilFlushed 플래그로 전송하면 PartyLocalEndpoint::FlushMessages가 호출될 때까지 전송을 지연하며, 그 시점에 큐잉된 메시지가 결합되어 전송됩니다.

배달 및 시퀀싱 옵션 결합

GuaranteedDelivery/BestEffortDeliverySequentialDelivery/NonsequentialDelivery 옵션은 독립적이며 자유롭게 결합할 수 있습니다. 각 조합은 뚜렷한 동작을 생성합니다.

헤드 오브 라인 차단 이해

헤드 오브 라인 차단은 배달 시퀀스의 앞부분에 있는 메시지가 아직 사용할 수 없을 때 발생합니다. 같은 시퀀스의 후속 메시지는 수신자가 이미 갖고 있더라도 애플리케이션에 배달될 수 없습니다. 헤드 오브 라인 차단과 관련된 옵션은 GuaranteedDelivery가 아니라 **SequentialDelivery**입니다. 순차 배달은 이전 메시지가 이후 메시지를 차단하는 순서 있는 시퀀스를 만듭니다. GuaranteedDelivery는 누락된 메시지를 건너뛰지 않고 재전송해야 하므로 대기 시간이 연장되기 때문에 영향을 증폭시킬 수 있습니다. BestEffortDelivery + SequentialDelivery에서는 누락된 메시지가 건너뛰어지고 시퀀스가 앞으로 이동하므로 차단 시간이 짧습니다. NonsequentialDelivery 메시지는 순차 메시지에 의해 절대로 차단되지 않습니다. 두 배달 모드는 서로 간섭하지 않습니다. 재전송 중인 보장된 순차 메시지는 비순차 메시지의 배달을 지연시키지 않습니다.

실용적 지침

일반적인 게임 패턴은 서로 다른 종류의 데이터에 대해 여러 전송 옵션을 동시에 사용합니다.
  • GuaranteedDelivery + SequentialDelivery: 순서와 완전성이 중요한 게임 상태 변경(예: 인벤토리 업데이트, 매치 상태 전환)에 사용합니다.
  • BestEffortDelivery + NonsequentialDelivery: 완전성보다 낮은 지연 시간이 더 중요한 빠르게 변하는 상태(예: 플레이어 위치, 조준 방향)에 사용합니다.
순차 및 비순차 메시지는 독립적이므로, 재전송 중인 상태 변경 메시지가 위치 업데이트의 배달을 지연시키지 않습니다.

여러 독립적인 시퀀스

각 로컬 엔드포인트는 독립적인 시퀀스 공간을 나타냅니다. 한 로컬 엔드포인트에서 특정 대상 엔드포인트로 전송된 모든 순차 메시지는 동일한 순서 보장을 공유합니다. 그 시퀀스 내에서의 헤드 오브 라인 차단은 동일한 시퀀스 내의 다른 순차 메시지에만 영향을 미칠 수 있습니다. 같은 두 디바이스 사이에 여러 개의 독립적인 순서 있는 스트림이 필요한 경우—예를 들어 게임 하위 시스템당 하나의 스트림—각 디바이스에 여러 로컬 엔드포인트를 만들 수 있습니다(Party 네트워크가 생성될 때 PartyNetworkConfiguration.maxEndpointsPerDeviceCount에 지정된 제한까지). 서로 다른 로컬 엔드포인트에서 전송된 순차 메시지는 서로 순서 또는 배달 관계를 가지지 않습니다.

네트워크 통계 및 로컬 큐잉

메시지 전송 옵션 및 네트워크 상태에 따라 Party는 전송 전에 메시지를 로컬로 큐잉할 수 있습니다. 이 로컬 큐잉은 지연 시간 도입을 방지하기 위해 신중하게 관리됩니다. Party가 플레이어의 네트워크를 폭주시키지 않고 결합과 같은 기능을 적용할 수 있도록 큐잉이 필요합니다. PartyNetwork::GetNetworkStatistics는 Party 릴레이 서비스로의 지연 시간을 포함한 네트워크 성능 집계 데이터를 수집합니다. PartyLocalEndpoint::GetEndpointStatistics는 특정 원격 엔드포인트에 대한 큐잉 및 패킷 손실 통계에 대한 가시성을 제공합니다.
마지막 수정일 2026년 8월 13일