Syntax
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,
}
Constants
| Constant | Description |
|---|---|
| Default | 기본 PartySendMessageOptions를 사용합니다. 기본 옵션은 BestEffortDelivery, NonsequentialDelivery, CopyDataBuffers, CoalesceOpportunistically, RequireTimelyAcknowledgement입니다. |
| GuaranteedDelivery | 필요한 경우 재전송하여 메시지가 모든 대상에 전달되도록 합니다. 이 옵션 플래그는 대상 엔드포인트가 소멸되지 않는 한 환경적 패킷 손실에 관계없이 메시지가 각 대상 엔드포인트에 도착하도록 보장합니다. 필요에 따라 패킷 전송이 재시도됩니다. 이 옵션 플래그는 반드시 대상에 도달해야 하며 그렇지 않으면 대상을 네트워크에서 제거해야 하는 중요한 상태 정보를 보낼 때 적합합니다. 손실된 경우 중복성이 없거나 보간/외삽할 수 없는 메시지 콘텐츠에 사용하며, 패킷 재전송이 필요한 경우 잠재적인 대역폭 사용 증가를 감수할 가치가 있는 경우에 사용하세요. 전달을 보장하는 것만으로는 특정 전달 순서를 보장하지 않습니다. 순서를 강제하려면 SequentialDelivery 옵션 플래그를 사용하세요. |
| BestEffortDelivery | 최선의 노력으로 메시지를 전송하고 모든 패킷 손실을 무시합니다. 이 옵션 플래그는 메시지 전송을 한 번만 시도하도록 요청합니다. 환경적 패킷 손실이 발생한 경우 전송은 재시도되지 않으며, 애플리케이션은 메시지가 없는 상황을 처리할 준비가 되어 있어야 합니다. 이 옵션 플래그는 지속적으로 업데이트되며 모든 업데이트가 도착할 필요가 없는 정보에 적합합니다. 손실된 경우 이미 중복성이 있거나 보간/외삽할 수 있어 재전송에 추가 대역폭을 사용할 가치가 없는 메시지 콘텐츠에 사용하세요. GuaranteedDelivery 옵션 플래그를 지정하지 않은 경우 기본값입니다. |
| SequentialDelivery | 이 로컬 엔드포인트에서 대상 엔드포인트로 순차적으로 전송된 다른 메시지를 기준으로 메시지를 순서대로 전달합니다. SequentialDelivery는 서로 다른 로컬 엔드포인트에서 그리고/또는 서로 다른 대상 엔드포인트로 보낸 메시지의 순서에 대해 어떠한 보장도 제공하지 않습니다. 각 엔드포인트 쌍은 별도의 시퀀스 공간으로 간주되어야 합니다. 순차 메시지와 비순차 메시지 간의 순서에 대해서는 어떠한 보장도 되지 않습니다. 이 옵션 플래그는 약간의 네트워크 효율성 저하와 환경에 의한 패킷 손실 또는 재정렬이 있는 경우 수신하는 데 약간 더 오래 걸리는 것을 감수하더라도 특정 순서로 대상에 도달해야 하는 상태 정보에 적합합니다. GuaranteedDelivery와 함께 SequentialDelivery를 사용하면 이전에 보낸 순차 메시지가 도착하기를 기다리는 동안 메시지가 대상 엔드포인트에서 큐에 대기될 수 있습니다. 이로 인해 환경적 패킷 손실 또는 재정렬을 경험할 때 대기 시간이 증가한 것처럼 인식될 수 있지만, 대상 엔드포인트는 보낸 순서와 동일한 순서로 항상 모든 메시지를 확인하게 됩니다. BestEffortDelivery와 함께 SequentialDelivery를 사용하면, 대상 엔드포인트에 순서가 잘못된 상태로 도착한 메시지가 있고 이후 순차 메시지가 이미 전달된 경우 메시지가 삭제될 수 있습니다. 대상 엔드포인트는 항상 시퀀스가 앞으로 이동하는 것을 볼 수 있지만, 해당 시퀀스에 간격이 있을 수 있습니다. 오래된 메시지는 절대 최신 메시지 이후에 전달되지 않습니다. |
| NonsequentialDelivery | 메시지가 도착하는 즉시 대상에 전달합니다. 비순차적 전달 옵션으로 보낸 메시지는 순차적이든 비순차적이든 다른 메시지와 관련하여 전달되는 순서에 대한 보장을 제공하지 않습니다. 도착하는 즉시 대상에 전달되며, 이는 환경에 의한 패킷 손실 또는 재정렬이 있는 경우 보낸 순서와 동일하지 않을 수 있습니다. 이 옵션 플래그는 어떤 순서로 처리해도 안전하거나 자체 고유 순서 정보를 이미 가지고 있으며, 최대 네트워크 효율성과 최소의 인지된 대기 시간을 원하는 메시지에 적합합니다. SequentialDelivery 옵션 플래그를 지정하지 않은 경우 기본값입니다. |
| CopyDataBuffers | 후속 전송을 위해 제공된 데이터 버퍼의 사본을 만들도록 Party 라이브러리에 지시합니다. 제공된 PartyDataBuffer 구조체의 메모리 콘텐츠가 복사되므로, 호출자는 PartyLocalEndpoint::SendMessage()가 반환된 후 버퍼를 유지할 필요가 없습니다. 이것은 DontCopyDataBuffers 옵션 플래그를 사용하는 것보다 더 편리하지만 약간 덜 효율적입니다. DontCopyDataBuffers 옵션 플래그를 지정하지 않은 경우 기본값입니다. |
| DontCopyDataBuffers | 제공된 데이터 버퍼를 직접 사용하도록 Party 라이브러리에 알리며, 호출자는 라이브러리가 더 이상 필요하지 않을 때까지 메모리를 유효한 상태로 유지합니다. 제공된 PartyDataBuffer 구조체가 참조하는 메모리는 복사되지 않고 대신 소유권이 Party 라이브러리로 일시적으로 전송되므로, 전송 프로세스 중 추가 복사 오버헤드 없이 메모리에 직접 액세스할 수 있습니다. 라이브러리가 더 이상 필요하지 않고 PartyDataBuffersReturnedStateChange를 통해 소유권이 다시 이전될 때까지 메모리 버퍼가 유효하고 수정되지 않은 상태로 유지되도록 하는 것은 호출자의 책임입니다. 이것은 CopyDataBuffers 옵션을 사용하는 것보다 더 효율적이지만 덜 편리할 수 있습니다. PartyLocalEndpoint::SendMessage() 호출이 반환된 후 PartyDataBuffer 구조체 자체는 유효한 상태로 유지될 필요가 없으며, 참조하는 메모리만 유효한 상태로 유지되어야 합니다. |
| CoalesceOpportunistically | 이 메시지가 큐에 있는 다른 메시지와 통합되어야 하지만 대기 중인 메시지가 없는 경우 전송을 지연해서는 안 됨을 지정합니다. 여러 메시지를 단일 패킷으로 통합하면 대역폭 효율성을 최대화(패킷당 오버헤드 감소)할 수 있지만, 통합을 위해 전송을 지연하는 경우 메시지의 인지된 대기 시간이 잠재적으로 희생될 수 있습니다. 이 플래그로 전송하면 Party 라이브러리는 큐에 있는 다른 메시지가 있는 경우 메시지를 통합하지만, 존재하지 않고 이 메시지가 즉시 전송될 수 있는 경우 더 많은 메시지를 기다리지 않습니다. 일반적으로 네트워크 업데이트를 다른 메시지와 같은 시기에 큐에 대기될 가능성이 없고 지연되어도 대역폭 효율성을 얻지 못하는 단일 주기적인 메시지로 일괄 처리하는 경우 이 플래그를 사용하세요. 이 플래그는 메시지가 즉시 전송을 시작한다는 보장을 하지 않습니다. 현재 연결 품질 또는 수신자 응답성이 아직 추가 데이터 전송을 지원하지 않는 것으로 보이는 경우, 메시지는 다음 전송 기회를 기다리기 위해 큐에 대기될 수 있습니다. AlwaysCoalesceUntilFlushed 옵션 플래그를 지정하지 않은 경우 기본값입니다. |
| AlwaysCoalesceUntilFlushed | 이 메시지가 항상 다른 메시지와 통합되도록 시도하고 전송을 시작하기 위해 PartyLocalEndpoint::FlushMessages() 호출을 기대함을 지정합니다. 여러 메시지를 단일 패킷으로 통합하면 대역폭 효율성을 최대화(패킷당 오버헤드 감소)할 수 있지만, 통합을 위해 전송을 지연하는 경우 메시지의 인지된 대기 시간이 잠재적으로 희생될 수 있습니다. 이 플래그로 전송하면 Party 라이브러리는 항상 메시지 통합을 선호하고 PartyLocalEndpoint::FlushMessages()가 호출될 때까지 전송을 지연합니다. 일반적으로 동일한 업데이트 루프에서 동일한 대상에 많은 작은 메시지를 보내고 전체 업데이트 루프 반복이 완료되었을 때 Party 라이브러리에 명시적으로 알리려는 경우 이 플래그를 사용하는 것을 고려하세요. 이 플래그를 사용하더라도 명시적인 PartyLocalEndpoint::FlushMessages() 호출 없이 메시지가 전송을 시작할 수 있는 시나리오가 있습니다. 이는 다른 이유로 이미 전송 중인 다른 큐에 대기된 메시지가 있고 이 메시지를 포함할 수 있는 공간이 패킷에 있는 경우 발생할 수 있습니다. 마찬가지로, 전체 패킷을 보낼 수 있을 만큼의 메시지 데이터 바이트가 존재하고 더 이상의 통합이 불가능한 경우 패킷이 전송됩니다. 모든 메시지가 이미 전송을 시작한 경우 PartyLocalEndpoint::FlushMessages()를 호출하는 것은 무해합니다. |
| RequireTimelyAcknowledgement | 이 메시지가 시기 적절한 방식으로 확인되어야 함(필요한 경우)을 나타냅니다. 수신자는 전달 성공 또는 실패를 발신자에게 알리기 위해 메시지 수신을 확인하므로, 발신자는 GuaranteedDelivery 옵션 플래그로 보낸 메시지를 포함한 손실된 패킷을 재시도하는 등의 작업을 할 수 있습니다. 확인은 일반적으로 양방향 통신의 일부로 패킷에 편승되지만, 반대 방향으로 패킷이 흐르지 않는 경우 이 플래그는 대상 엔드포인트가 편승 기회에 대해 내부적으로 관리되는 짧은 시간 초과 동안만 기다린 후 발신자에게 알리기 위해 확인 패킷을 강제로 보내도록 지시합니다. 해당 전용 패킷은 약간의 추가 오버헤드를 소비하지만, 발신자가 필요한 재시도를 발행하기 위한 시기 적절한 상태를 얻도록 합니다. 대부분의 보장 전달 메시지에 이 플래그를 사용하는 것이 좋습니다. 대기 시간에 민감한 메시지에 적합합니다. 또한 양방향 보장 전달 전송 패턴이 드물거나 예측할 수 없는 경우에도 적합합니다. AllowLazyAcknowledgement 옵션 플래그를 지정하지 않은 경우 기본값입니다. GuaranteedDelivery 옵션 플래그를 지정하지 않은 경우 이 플래그는 무시됩니다. |
| AllowLazyAcknowledgement | 이 메시지가 긴급하게가 아니라 편리할 때 확인될 수 있음을 나타냅니다. 수신자는 전달 성공 또는 실패를 발신자에게 알리기 위해 메시지 수신을 확인하므로, 발신자는 GuaranteedDelivery 옵션 플래그로 보낸 메시지를 포함한 손실된 패킷을 재시도하는 등의 작업을 할 수 있습니다. 확인은 일반적으로 양방향 통신의 일부로 패킷에 편승되지만, 반대 방향으로 패킷이 흐르지 않는 경우 이 플래그는 대상 엔드포인트가 발신자에게 알리기 위해 확인 패킷을 강제로 보내지 않고 편승 기회를 기다리도록 지시합니다. 이는 필요한 재시도에 대한 상태를 발신자가 알아내는 것을 지연시키지만, 전용 패킷으로 소비되는 추가 오버헤드를 방지합니다. “실행 후 무시” 방식이며 대기 시간에 민감하지 않은 보장 전달 메시지에 이 플래그를 사용하는 것을 고려하세요. 양방향 전송 패턴이 빈번한 경우에도 오버헤드를 줄일 수 있습니다. GuaranteedDelivery 옵션 플래그도 지정되지 않은 경우 이 플래그는 무시됩니다. |
Requirements
Header: Party.hSee also
Party membersPartySendMessageQueuingConfiguration
PartyDataBuffersReturnedStateChange
PartyLocalEndpoint::SendMessage
PartyLocalEndpoint::FlushMessages
