語法
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 不保證從不同本機端點和/或傳送至不同目標端點之訊息的順序。每個端點配對都應被視為個別的序列空間。 不保證循序訊息相對於非循序訊息的順序。 此選項旗標適用於應依特定順序送達目的地的狀態資訊,即使這表示網路效率稍低,且在環境中發生封包遺失或重新排序時可能需要稍等久一點才能收到。 將 SequentialDelivery 與 GuaranteedDelivery 一起使用,可能會導致訊息在目標端點上排入佇列,等候先前傳送的循序訊息到達。這可能會在遇到環境封包遺失或重新排序時造成感知延遲增加,但目標端點一律會依傳送順序看到每則訊息。 將 SequentialDelivery 與 BestEffortDelivery 一起使用,如果有訊息不依順序到達目標端點,且較晚的循序訊息已經傳遞,該訊息可能會被捨棄。目標端點一律會看到序列向前推進,但序列中可能會有缺漏。較舊的訊息永遠不會在較新的訊息之後傳遞。 |
| NonsequentialDelivery | 訊息一到達就傳遞給目標。 以非循序傳遞選項傳送的訊息,不保證相對於任何其他訊息 (循序或非循序) 的傳遞順序。它們一到達就會傳遞給目標,如果環境中發生封包遺失或重新排序,傳遞順序可能與傳送順序不同。 此選項旗標適用於可以依任何順序安全處理,或本身已有固有順序資訊的訊息,且您希望獲得最大網路效率和最低感知延遲的情況。 如果未指定 SequentialDelivery 選項旗標,這就是預設值。 |
| CopyDataBuffers | 指示 Party 程式庫複製所提供的資料緩衝區以供後續傳輸。 所提供之 PartyDataBuffer 結構中的記憶體內容會被複製,因此呼叫者在 PartyLocalEndpoint::SendMessage() 傳回後不需要保留緩衝區。這比使用 DontCopyDataBuffers 選項旗標更方便,但效率稍低。 如果未指定 DontCopyDataBuffers 選項旗標,這就是預設值。 |
| DontCopyDataBuffers | 通知 Party 程式庫直接使用所提供的資料緩衝區,且呼叫者會讓記憶體保持有效,直到程式庫不再需要為止。 所提供之 PartyDataBuffer 結構所參考的記憶體不會被複製,而是會暫時將擁有權轉移給 Party 程式庫,以便在傳輸過程中直接存取記憶體,而不會產生額外的複製負荷。呼叫者必須負責確保記憶體緩衝區保持有效且不被修改,直到程式庫不再需要它們,並透過 PartyDataBuffersReturnedStateChange 將擁有權轉移回來為止。這比使用 CopyDataBuffers 選項更有效率,但可能較不方便。 PartyDataBuffer 結構本身不需要在 PartyLocalEndpoint::SendMessage() 呼叫傳回後保持有效,只有它們所參考的記憶體需要。 |
| CoalesceOpportunistically | 指定此訊息應與任何其他佇列中的訊息合併,但如果沒有任何訊息在等候,則不應延遲傳輸。 將多則訊息合併到單一封包中,可以最大化頻寬效率 (減少每個封包的額外負荷),但如果為了合併而延遲傳輸,可能會犧牲訊息的感知延遲。使用此旗標傳送會讓 Party 程式庫在有其他佇列中的訊息可用時合併訊息,但如果沒有其他訊息且此訊息可以立即傳輸,則不會等候更多訊息。 如果您通常會將網路更新批次處理為單一的定期訊息,這些訊息不太可能與其他訊息在同一時間排入佇列,且延遲傳輸也不會提升頻寬效率,請使用此旗標。 此旗標不保證訊息會立即開始傳輸。如果連線品質或接收者回應能力目前似乎無法支援傳送更多資料,訊息可能會排入佇列,等候下一次傳輸機會。 如果未指定 AlwaysCoalesceUntilFlushed 選項旗標,這就是預設值。 |
| AlwaysCoalesceUntilFlushed | 指定此訊息應一律嘗試與其他訊息合併,並預期會有 PartyLocalEndpoint::FlushMessages() 呼叫來開始傳輸。 將多則訊息合併到單一封包中,可以最大化頻寬效率 (減少每個封包的額外負荷),但如果為了合併而延遲傳輸,可能會犧牲訊息的感知延遲。使用此旗標傳送會讓 Party 程式庫一律偏好合併訊息,並延遲傳輸直到呼叫 PartyLocalEndpoint::FlushMessages() 為止。 如果您通常會在同一個更新迴圈中將大量小型訊息傳送給相同的目標,並想要在完整的更新迴圈反覆運算完成時明確通知 Party 程式庫,請考慮使用此旗標。 即使使用此旗標,在某些情況下訊息也可能在不需要明確呼叫 PartyLocalEndpoint::FlushMessages() 的情況下開始傳輸。當有其他佇列中的訊息已因其他原因正在傳輸,且封包中有空間包含此訊息時,就可能發生這種情況。同樣地,當有足夠的訊息資料位元組可傳送完整封包且無法再進一步合併時,就會傳送該封包。在所有訊息都已開始傳輸時呼叫 PartyLocalEndpoint::FlushMessages() 是無害的。 |
| RequireTimelyAcknowledgement | 表示應及時確認此訊息 (如果需要)。 接收者會確認訊息的接收,以通知傳送者傳遞成功或失敗,讓傳送者可以執行重試包含以 GuaranteedDelivery 選項旗標傳送之訊息的遺失封包等動作。確認通常會作為典型雙向通訊的一部分附帶在封包上,但如果沒有封包在回傳方向流動,此旗標會指示目標端點只等候一小段內部管理的逾時以尋找附帶機會,然後強制傳送確認封包來通知傳送者。該專用封包會耗用一些額外負荷,但可確保傳送者及時取得狀態以發出任何必要的重試。 建議對大多數保證傳遞訊息使用此旗標。它適用於對延遲敏感的訊息。當雙向保證傳遞傳送模式不頻繁或無法預測時,它也很適用。 如果未指定 AllowLazyAcknowledgement 選項旗標,這就是預設值。 如果未指定 GuaranteedDelivery 選項旗標,則會忽略此旗標。 |
| AllowLazyAcknowledgement | 表示可以在方便時確認此訊息,而非緊急確認。 接收者會確認訊息的接收,以通知傳送者傳遞成功或失敗,讓傳送者可以執行重試包含以 GuaranteedDelivery 選項旗標傳送之訊息的遺失封包等動作。確認通常會作為典型雙向通訊的一部分附帶在封包上,但如果沒有封包在回傳方向流動,此旗標會指示目標端點等候附帶的機會,而不強制傳送確認封包來通知傳送者。這會延遲傳送者得知任何必要重試的狀態,但可避免專用封包所耗用的額外負荷。 對於「射後不理」且對延遲不敏感的保證傳遞訊息,請考慮使用此旗標。當雙向傳送模式頻繁時,它也可能會減少額外負荷。 如果未同時指定 GuaranteedDelivery 選項旗標,則會忽略此旗標。 |
需求
標頭: Party.h另請參閱
Party 成員PartySendMessageQueuingConfiguration
PartyDataBuffersReturnedStateChange
PartyLocalEndpoint::SendMessage
PartyLocalEndpoint::FlushMessages
