다음을 통해 공유


PartySendMessageOptions

메시지를 보내는 방법을 제어하는 옵션입니다.

구문

enum class PartySendMessageOptions  : int32_t  
{  
    Default = 0x0000,  
    GuaranteedDelivery = 0x0001,  
    BestEffortDelivery = 0x0000,  
    SequentialDelivery = 0x0002,  
    NonsequentialDelivery = 0x0000,  
    CopyDataBuffers = 0x0000,  
    DontCopyDataBuffers = 0x0004,  
    CoalesceOpportunistically = 0x0000,  
    AlwaysCoalesceUntilFlushed = 0x0008,  
    RequireTimelyAcknowledgement = 0x0000,  
    AllowLazyAcknowledgement = 0x0010,  
}  

상수

상수 설명
Default 기본 PartySendMessageOptions를 사용합니다.

기본 옵션은 BestEffortDelivery, NonsequentialDelivery, CopyDataBuffers, CoalesceOpportunistically, RequireTimelyAcknowledgement입니다.
GuaranteedDelivery 메시지가 모든 대상에 배달되었는지 확인하고 필요한 경우 재전송합니다.

이 옵션 플래그를 지정하면 대상 엔드포인트가 제거되지 않는 한 환경 패킷 손실에 관계없이 메시지가 각 대상 엔드포인트에 도착합니다. 필요에 따라 패킷 전송이 다시 시도됩니다.

이 옵션 플래그는 항상 대상에 도달해야 하고 그러지 않으면 대상을 네트워크에서 제거해야 하는 중요한 상태 정보를 보낼 때 효과적입니다. 중복성이 없거나 손실된 경우 보간/추정할 수 있는 기능이 없는 메시지 콘텐츠에 사용하며 패킷 재전송이 필요한 경우 대역폭 사용량이 증가할 가능성이 있습니다.

배달 자체가 보장된다 해도 특정 배달 순서가 보장되는 것은 아닙니다. 배달 순서를 적용하려면 SequentialDelivery 옵션 플래그를 사용합니다.
BestEffortDelivery 메시지 전송에 최선을 다하고 패킷 손실은 무시합니다.

이 옵션 플래그는 한 번의 메시지 전송 시도만 요청합니다. 환경 패킷 손실이 발생하면 전송이 다시 시도되지 않으며 애플리케이션은 메시지 없음을 처리할 수 있도록 준비해야 합니다.

이 옵션 플래그는 지속적으로 업데이트되며 모든 업데이트가 도착할 필요는 없는 정보에 적합합니다. 중복성 또는 손실될 경우 보간/추정할 수 있는 기능이 이미 있고 추가 대역폭을 들여 다시 전송할 필요는 없는 메시지 콘텐츠에 사용합니다.

GuaranteedDelivery 옵션 플래그를 지정하지 않은 경우 기본값입니다.
SequentialDelivery 이 로컬 엔드포인트에서 대상 엔드포인트로 역시 순차적으로 전송된 다른 메시지를 기준으로 메시지를 순서대로 전송합니다.

SequentialDelivery는 다른 로컬 엔드포인트에서 및/또는 다른 대상 엔드포인트로 전송되는 메시지의 순서는 보장하지 않습니다. 각 엔드포인트 페어링은 별도의 시퀀스 공간으로 간주해야 합니다.

비순차적 메시지를 기준으로 순차적 메시지의 순서는 보장되지 않습니다.

이 옵션 플래그는 네트워크 효율성이 다소 낮아지고 환경에 의한 패킷 손실이나 순서 조정으로 수신하는 데 더 오래 걸릴 수 있더라도 특정 순서로 대상에 도달해야 하는 상태 정보에 적합합니다.

GuaranteedDeliverySequentialDelivery를 함께 사용하면 이전에 전송된 순차 메시지가 도착할 때까지 기다리느라 메시지가 대상 엔드포인트에서 큐에 대기될 수 있습니다. 이로 인해 환경 패킷 손실이나 순서 조정이 발생할 경우 대기 시간이 눈에 띄게 증가할 수 있지만 대상 엔드포인트는 항상 모든 메시지가 전송된 순서와 같은 순서로 표시됩니다.

SequentialDeliveryBestEffortDelivery와 함께 사용하면 대상 엔드포인트에 메시지가 잘못된 순서로 도착하고 이후 순차 메시지가 이미 배달된 경우 메시지가 삭제될 수 있습니다. 대상 엔드포인트는 항상 순서가 앞으로 나아가지만 해당 순서에 차이가 생길 수 있습니다. 이전 메시지가 최신 메시지 이후에 배달되지 않습니다.
NonsequentialDelivery 메시지를 도착하는 즉시 대상에 배달합니다.

비순차적 배달 옵션으로 전송된 메시지는 순차적 또는 비순차적인 다른 메시지와 관련하여 배달되는 순서에 대한 어떠한 보장도 제공하지 않습니다. 메시지는 도착하는 즉시 대상에 배달되며, 환경에 의해 패킷 손실이나 순서 조정이 발생하는 경우 전송된 순서와 동일하지 않을 수 있습니다.

이 옵션 플래그는 어떤 순서로든 처리해도 안전하거나 자체의 고유한 순서 지정 정보가 이미 있는 메시지와 최대 네트워크 효율성 및 가장 낮은 감지된 대기 시간을 원하는 메시지에 적합합니다.

SequentialDelivery 옵션 플래그를 지정하지 않은 경우 기본값입니다.
CopyDataBuffers 후속 전송을 위해 제공된 데이터 버퍼의 복사본을 만들도록 파티 라이브러리에 지시합니다.

제공된 PartyDataBuffer 구조의 메모리 콘텐츠가 복사되므로 PartyLocalEndpoint::SendMessage()가 반환된 후 호출자가 버퍼를 유지할 필요가 없습니다. DontCopyDataBuffers 옵션 플래그를 사용하는 경우보다 더 간편하지만 약간 덜 효율적입니다.

DontCopyDataBuffers 옵션 플래그를 지정하지 않은 경우 기본값입니다.
DontCopyDataBuffers 제공된 데이터 버퍼를 직접 사용하고 라이브러리에서 더 이상 필요하지 않을 때까지 호출자가 메모리를 유효한 상태로 유지하도록 파티 라이브러리에 알립니다.

제공된 PartyDataBuffer 구조에서 참조하는 메모리는 복사되지 않지만 대신 소유권이 파티 라이브러리로 일시적으로 전송되므로 전송 프로세스 중에 추가 복사 오버헤드 없이 메모리에 직접 액세스할 수 있습니다. 호출자는 라이브러리에 더 이상 메모리 버퍼가 필요하지 않고 소유권이 PartyDataBuffersReturnedStateChange를 통해 다시 전송될 때까지 메모리 버퍼가 유효하고 수정되지 않은 상태로 유지되도록 해야 합니다. CopyDataBuffers 옵션을 사용하는 경우보다 더 효율적이지만 덜 간편할 수 있습니다.

PartyLocalEndpoint::SendMessage() 호출이 반환된 후에는 PartyDataBuffer 구조 자체가 유효한 상태를 유지할 필요가 없으며 참조하는 메모리만 반환됩니다.
CoalesceOpportunistically 이 메시지를 큐에 있는 다른 메시지와 병합해야 하지만 대기 중인 메시지가 없는 경우 전송을 지연해서는 안 되도록 지정합니다.

여러 메시지를 단일 패킷에 병합하면 대역폭 효율성이 극대화될 수 있지만(패킷당 오버헤드 감소) 병합하기 위해 전송을 지연할 경우 메시지의 감지되는 대기 시간이 발생할 수 있습니다. 이 플래그를 사용하여 보내면 다른 큐에 대기 중인 메시지가 있는 경우 파티 라이브러리가 메시지를 병합하지만, 큐에 메시지가 없고 이 메시지를 즉시 전송할 수 있는 경우 더 많은 메시지를 기다리지 않습니다.

일반적으로 네트워크 업데이트를 다른 메시지와 거의 동시에 큐에 대기할 가능성이 없고 지연된 경우 대역폭 효율성을 얻지 못하는 주기적인 단일 메시지로 일괄 처리하는 경우 이 플래그를 사용합니다.

이 플래그를 지정해도 메시지가 즉시 전송되기 시작한다고 보장되지 않습니다. 연결 품질 또는 수신자 응답성이 현재 추가 데이터 전송을 지원하지 않는 경우 다음 전송 기회를 기다리도록 메시지가 큐에 대기될 수 있습니다.

AlwaysCoalesceUntilFlushed 옵션 플래그를 지정하지 않은 경우 기본값입니다.
AlwaysCoalesceUntilFlushed 이 메시지가 항상 다른 메시지와 병합되도록 하고 PartyLocalEndpoint::FlushMessages() 호출을 사용하여 전송을 시작하도록 지정합니다.

여러 메시지를 단일 패킷에 병합하면 대역폭 효율성이 극대화될 수 있지만(패킷당 오버헤드 감소) 병합하기 위해 전송을 지연할 경우 메시지의 감지되는 대기 시간이 발생할 수 있습니다. 이 플래그를 사용하여 보내면 파티 라이브러리가 항상 메시지를 병합하고 PartyLocalEndpoint::FlushMessages()가 호출될 때까지 전송을 지연하는 것을 선호합니다.

일반적으로 동일한 업데이트 루프의 동일한 대상에 많은 작은 메시지를 보내고 전체 업데이트 루프 반복이 완료되면 파티 라이브러리에 명시적으로 알리려는 경우 이 플래그를 사용하는 것이 좋습니다.

이 플래그를 사용하더라도 명시적 PartyLocalEndpoint::FlushMessages() 호출 없이 메시지가 전송되기 시작할 수 있는 경우가 있습니다. 다른 이유로 이미 전송되고 있는 다른 큐에 대기 중인 메시지가 있고 패킷에 이 메시지를 포함할 공간이 있는 경우 이 문제가 발생할 수 있습니다. 마찬가지로 전체 패킷을 보내기에 충분한 메시지 데이터 바이트가 있고 더 이상 병합할 수 없는 경우 패킷이 전송됩니다. 모든 메시지가 이미 전송되기 시작한 경우 PartyLocalEndpoint::FlushMessages()를 호출하는 것은 무해합니다.
RequireTimelyAcknowledgement 이 메시지를 적시에 승인해야 함(필요한 경우)을 나타냅니다.

수신자는 GuaranteedDelivery 옵션 플래그와 함께 전송된 메시지가 포함된 삭제된 패킷을 다시 시도하는 등의 작업을 수행할 수 있도록 보낸 사람에게 배달 성공 또는 실패를 알리는 메시지 수신을 승인합니다. 승인은 일반적인 양방향 통신의 일부로 패킷에서 피기백되는 경우가 많지만 반환 방향으로 흐르는 패킷이 없는 경우 이 플래그는 승인 패킷이 보낸 사람에게 알리도록 강제 적용하기 전에 피기백 기회를 위해 내부적으로 관리되는 작은 제한 시간만 대기하도록 대상 엔드포인트에 지시합니다. 이 전용 패킷은 약간의 추가 오버헤드를 사용하지만 보낸 사람이 필요한 재시도를 실행하기 위한 상태를 적시에 가져오도록 합니다.

대부분의 배달이 보장된 메시지에 이 플래그를 사용하는 것이 좋습니다. 대기 시간이 중요한 메시지에서 잘 작동합니다. 양방향으로 배달 보장되는 보내기 패턴이 자주 발생하지 않거나 예측할 수 없는 경우에도 잘 작동합니다.

AllowLazyAcknowledgement 옵션 플래그를 지정하지 않은 경우 기본값입니다.

GuaranteedDelivery 옵션 플래그를 지정하지 않으면 이 플래그는 무시됩니다.
AllowLazyAcknowledgement 긴급하게가 아니라 편리할 때 이 메시지를 승인할 수 있음을 나타냅니다.

수신자는 GuaranteedDelivery 옵션 플래그와 함께 전송된 메시지가 포함된 삭제된 패킷을 다시 시도하는 등의 작업을 수행할 수 있도록 보낸 사람에게 배달 성공 또는 실패를 알리는 메시지 수신을 승인합니다. 승인은 일반적인 양방향 통신의 일부로 패킷에서 피기백되는 경우가 많지만 반환 방향으로 흐르는 패킷이 없는 경우 이 플래그는 승인 패킷이 보낸 사람에게 알리도록 강제 적용하기 전에 피기백 기회를 대기하도록 대상 엔드포인트에 지시합니다. 이렇게 하면 보낸 사람이 필요한 재시도의 상태를 찾는 작업이 지연되지만 전용 패킷에서 사용하는 추가 오버헤드를 방지할 수 있습니다.

“fire-and-forget”이고 대기 시간이 중요하지 않은 배달이 보장된 배달 메시지에 이 플래그를 사용하는 것이 좋습니다. 양방향 전송 패턴이 자주 발생하는 경우 오버헤드를 줄일 수도 있습니다.

GuaranteedDelivery 옵션 플래그를 지정하지 않으면 이 플래그는 무시됩니다.

요구 사항

헤더: Party.h

참고 항목

파티 멤버
PartySendMessageQueuingConfiguration
PartyDataBuffersReturnedStateChange
PartyLocalEndpoint::SendMessage
PartyLocalEndpoint::FlushMessages