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,
}
常量
常量 | 说明 |
---|---|
默认 | 使用默认 PartySendMessageOptions。 默认选项 BestEffortDelivery、 NonsequentialDelivery、 CopyDataBuffers、 CoalesceOpportunistically和 RequireTimelyAcknowledgement。 |
GuaranteedDelivery | 确保将消息传递到所有目标,必要时重新传输。 此选项标志保证消息将到达每个目标终结点,而不考虑环境数据包丢失,除非目标终结点被销毁。 将根据需要重试数据包传输。 当发送必须始终到达目标的重要状态信息时,此选项标志非常有用,否则应从网络中删除目标。 将其与消息内容一起使用,这些内容没有冗余,或者在丢失时可以内插/外插,如果需要数据包重新传输,则值得增加带宽使用量。 保证传递本身并不意味着保证特定的交货顺序;使用 SequentialDelivery 选项标志强制执行排序。 |
BestEffortDelivery | 尽力传输消息,并忽略任何数据包丢失。 此选项标志仅请求一次尝试传输消息。 如果发生环境数据包丢失,则不会重试传输,并且应用程序应准备好处理消息的缺失。 此选项标志适用于不断更新且不需要每次更新即可到达的信息。 将其用于已具有冗余的消息内容,或者如果消息内容丢失且不值得重新传输额外的带宽,则可以进行内插/推断。 如果未指定 GuaranteedDelivery 选项标志,则这是默认值。 |
SequentialDelivery | 根据从此本地终结点发送到目标终结点(也按顺序发送)的其他消息,按顺序传递消息。 SequentialDelivery 不保证从不同的本地终结点和/或发送到不同目标终结点的消息的排序。 每个终结点配对应被视为单独的序列空间。 对于相对于非顺序消息的顺序消息顺序,不提供任何保证。 此选项标志适用于应以特定顺序到达目标的状态信息,即使这意味着网络效率略低,如果环境出现数据包丢失或重新排序,可能等待更长的时间来接收它。 将 SequentialDelivery 与 GuaranteedDelivery 配合使用可能会导致消息在目标终结点上排队,同时等待以前发送的顺序消息到达。 这可能会导致在遇到环境数据包丢失或重新排序时延迟明显增加,但目标终结点始终会以发送顺序看到每条消息。 将 SequentialDelivery 与 BestEffortDelivery 结合使用可能会导致消息被丢弃,前提是一个消息以无序方式到达目标终结点,并且已传递了稍后的顺序消息。 目标终结点将始终看到序列向前移动,但该序列中可能存在间隙。 较新的邮件后,将永远不会传递较旧的消息。 |
NonsequentialDelivery | 消息到达后立即传递到目标。 使用非顺序传递选项发送的邮件不提供与任何其他消息(顺序或非顺序)相关的传递顺序的任何保证。 当目标到达时,它们将立即传递到目标,如果环境出现数据包丢失或重新排序,则这些目标的发送顺序可能不同。 此选项标志适用于可以安全地按任何顺序处理或已有其固有排序信息的邮件,以及希望最大网络效率和最低感知延迟的邮件。 如果未指定 SequentialDelivery 选项标志,则这是默认值。 |
CopyDataBuffers | 指示参与方库为后续传输创建所提供数据缓冲区的副本。 将复制提供的 PartyDataBuffer 结构中的内存内容,因此调用方无需在 PartyLocalEndpoint::SendMessage() 返回后保留缓冲区。 这比使用 DontCopyDataBuffers 选项标志更方便,但效率略低。 如果未指定 DontCopyDataBuffers 选项标志,则这是默认值。 |
DontCopyDataBuffers | 通知参与方库直接使用提供的数据缓冲区,并且调用方将保持内存有效,直到库不再需要它们。 提供的 PartyDataBuffer 结构引用的内存不会被复制,而是会暂时将所有权传输到 Party 库,以便在传输过程中可以直接访问内存,而无需额外的复制开销。 调用方负责确保内存缓冲区保持有效且未修改,直到库不再需要它们,并且所有权通过 PartyDataBuffersReturnedStateChange转移回来。 这比使用 CopyDataBuffers 选项更有效,但可能不太方便。 在 PartyLocalEndpoint::SendMessage() 调用返回后,PartyDataBuffer 结构本身不需要保持有效,只需要它们引用的内存。 |
CoalesceOpportunistically | 指定此消息应与任何其他排队的消息合并,但如果没有任何等待,则不应延迟传输。 将多个消息合并到单个数据包中可以最大程度地提高带宽效率(减少每个数据包开销),如果为了合并而延迟消息的传输,则可能会降低消息的感知延迟。 如果有其他排队消息可用,则使用此标志发送会导致参与方库合并消息,但如果不存在,则不会等待更多消息,并且可以立即传输此消息。 如果通常将网络更新批处理成单个定期消息,这些消息不太可能与其他消息同时排队,并且在延迟时不会提高带宽效率,请使用此标志。 此标志不保证消息立即开始传输。 如果连接质量或接收方响应能力目前尚不支持发送其他数据,则消息可能会排队等待下一个传输机会。 如果未指定 AlwaysCoalesceUntilFlushed 选项标志,则这是默认值。 |
AlwaysCoalesceUntilFlushed | 指定此消息应始终尝试与其他消息合并,并期望 PartyLocalEndpoint::FlushMessages() 调用开始传输。 将多个消息合并到单个数据包中可以最大程度地提高带宽效率(减少每个数据包开销),如果为了合并而延迟消息的传输,则可能会降低消息的感知延迟。 使用此标志发送会导致 Party 库始终倾向于合并消息并延迟传输,直到调用 PartyLocalEndpoint::FlushMessages()。 如果通常向同一更新循环中的相同目标发送大量小消息,并且想要在完整更新循环迭代完成时显式通知参与方库,请考虑使用此标志。 即使使用此标志,在某些情况下,消息可能开始传输,而无需显式 PartyLocalEndpoint::FlushMessages() 调用。 当由于其他原因已经在传输其他排队消息,并且数据包中存在包含此消息的空间时,可能会发生这种情况。 同样,如果有足够的消息数据字节来发送完整数据包,并且不可能再发送任何合并数据包,则会发送数据包。 当所有消息都已开始传输时,调用 PartyLocalEndpoint::FlushMessages()是良性的。 |
RequireTimelyAcknowledgement | 指示应及时确认此消息(如果需要)。 接收方确认接收消息以通知发件人传递成功或失败,以便它可以执行一些操作,例如重试丢弃的数据包,这些数据包包含 GuaranteedDelivery 选项标志发送的邮件。 确认通常会在数据包上作为典型双向通信的一部分进行回复,但如果没有数据包在返回方向流动,则此标志指示目标终结点在强制确认数据包通知发件人之前,只等待内部管理的小超时来回溯机会。 该专用数据包会消耗一些额外的开销,但可确保发件人及时获得发出任何必要的重试的状态。 建议对最有保证的传递消息使用此标志。 它适用于延迟敏感的消息。 当双向保证的传递发送模式不频繁或不可预测时,它也非常有效。 如果未指定 AllowLazyAcknowledgement 选项标志,则默认值为此值。 如果未指定 GuaranteedDelivery 选项标志,则忽略此标志。 |
AllowLazyAcknowledgement | 指示在方便而不是紧急时可以确认此消息。 接收方确认接收消息以通知发件人传递成功或失败,以便它可以执行一些操作,例如重试丢弃的数据包,这些数据包包含 GuaranteedDelivery 选项标志发送的邮件。 在典型的双向通信中,确认通常会在数据包上受阻,但如果没有数据包在返回方向流动,则此标志指示目标终结点等待回溯机会,而不强制确认数据包通知发件人。 这会延迟发件人查找任何必要重试的状态,但避免专用数据包消耗额外的开销。 请考虑将此标志用于保证传递消息,这些消息是"即发即用"且不区分延迟。 当双向发送模式频繁出现时,它还可以减少开销。 如果未指定 GuaranteedDelivery 选项标志,则忽略此标志。 |
要求
标题: Party.h
另请参阅
群成员
PartySendMessageQueuingConfiguration
PartyDataBuffersReturnedStateChange
PartyLocalEndpoint::SendMessage
PartyLocalEndpoint::FlushMessages