PartySendMessageQueuingConfiguration
Optionale Konfigurationsparameter zum Ändern des lokalen Warteschlangenverhaltens beim Senden einer Nachricht.
Syntax
struct PartySendMessageQueuingConfiguration {
int8_t priority;
uint32_t identityForCancelFilters;
uint32_t timeoutInMilliseconds;
}
Mitglieder
priority
int8_t
Die Priorität der lokal in die Warteschlange eingereihten Nachricht in Bezug auf Chatdaten oder Nachrichten, die von anderen lokalen Endpunkten gesendet werden.
priority
muss ein Wert zwischen c_minSendMessageQueuingPriority
und c_maxSendMessageQueuingPriority
sein, einschließlich. Höhere Zahlen stellen eine höhere relative Priorität (wird zuerst übertragen) gegenüber niedrigeren Zahlen dar. Der Standardwert, wenn keine PartySendMessageQueuingConfiguration-Struktur für PartyLocalEndpoint::SendMessage() bereitgestellt wird, ist c_defaultSendMessageQueuingPriority
, was genau in der Mitte des bereichs mit Vorzeichen (null) liegt.
Die Priorität der Sendewarteschlange ändert nicht die Reihenfolge, in der nachrichten, die von einem bestimmten lokalen Endpunkt gesendet werden, übertragen oder übermittelt werden. Dies wirkt sich nur auf die Reihenfolge von Nachrichten von verschiedenen lokalen Endpunkten oder zwischen einem Endpunkt und intern übertragenen Chatdaten aus, für die die Priorität c_chatSendMessageQueuingPriority
verwendet wird. Die sendewarteschlange des lokalen Endpunkts mit den Nachrichten mit dem höchsten Prioritätswert hat die Nachrichten, die zuerst für die Übertragung berechtigt sind. Wenn alle verbleibenden Nachrichten, die von lokalen Endpunkten in die Warteschlange gestellt werden, die gleiche Priorität haben, können die einzelnen Nachrichten in der gleichen Reihenfolge übertragen werden, in der ihre PartyLocalEndpoint::SendMessage()-Aufrufe erfolgt sind.
Eine Möglichkeit, das Verhalten zu betrachten, besteht darin, dass Nachrichten mit hoher Priorität die Priorität aller vorherigen Nachrichten vom gleichen lokalen Endpunkt automatisch auf denselben Wert erhöhen, um die rechtzeitige Zustellung der Nachricht mit hoher Priorität sicherzustellen, ohne die erwartungen der sequenziellen Übermittlung der Nachrichten, die zuvor vom lokalen Endpunkt übertragen wurden, zu brechen. Andere lokale Endpunkte verfügen über eine eigene Sendesequenz und haben daher keine derartigen Bestellgarantien (obwohl die Parteibibliothek nach Möglichkeit versucht, die Reihenfolge, in der sie ursprünglich gesendet wurden, nach Möglichkeit beizubehalten).
Die Priorität der Sendewarteschlange einer Nachricht ist wichtig, wenn mehr Bytes gesendet werden müssen, als die Verbindung aufgrund der Verbindungsqualität oder der Empfängerreaktionsfähigkeit unterstützen kann. Das Senden wichtiger Nachrichten mit höherer Priorität stellt sicher, dass sie die erste Möglichkeit erhalten, die begrenzten Netzwerkressourcen zu verwenden. Wenn Sie weiterhin Nachrichten schneller senden, als erfolgreich übertragen werden können, werden Nachrichten mit niedrigerer Priorität möglicherweise "ausgehungert", und die zugeordnete lokale Endpunkt-Sendewarteschlange wird weiter vergrößert. Achten Sie darauf, ein solches potenzielles Wachstum zu verwalten, indem Sie überflüssige Nachrichten mit PartyLocalEndpoint::CancelMessages() abbrechen, das timeoutInMilliseconds
Feld zum automatischen Timeout für Nachrichten verwenden, die zu lange in die Warteschlange gestellt wurden, oder einfach die Größe und/oder Häufigkeit der PartyLocalEndpoint::SendMessage()-Aufrufe reduzieren.
identityForCancelFilters
uint32_t
Ein vom Aufrufer definierter Wert, der beim Auswerten der Nachricht auf Anwendbarkeit mit Abbruchfilterausdrücken verwendet werden soll.
Dieser Nachrichtenidentitätswert kann eine aufruferspezifische Bedeutung haben und wird nicht von der Party-Bibliothek interpretiert, außer für die Verwendung durch PartyLocalEndpoint::CancelMessages(), wenn ausgewertet wird, ob die Nachricht mit dem optional bereitgestellten Abbruchfilterausdruck übereinstimmt.
Der Standardwert 0 (null) wird verwendet, wenn keine PartySendMessageQueuingConfiguration-Struktur für PartyLocalEndpoint::SendMessage() bereitgestellt wird.
Das Abbrechen von Nachrichten kann dazu beitragen, zu verhindern, dass die lokale Sendewarteschlange bei schlechten Netzwerkbedingungen übermäßig anwächst. Das Abbrechen von Nachrichtenidentitäten, die bestimmten Filterausdrücken entsprechen, funktioniert gut, wenn Kategorien von Nachrichten vorhanden sind, die regelmäßig mit den neuesten Informationen gesendet werden und alle zuvor in der Warteschlange befindlichen veralteten Nachrichten ersetzen sollten, die möglicherweise noch auf eine Übertragungsmöglichkeit warten. Das Abbrechen kann auch nützlich sein, wenn Sie über eine instance oder Kategorie von opportunistischen Nachrichten verfügen, deren Verlust nicht schwerwiegend wäre und die die Bandbreite nicht wert sind, um anstelle von wertvolleren Nachrichten in der Warteschlange zu übertragen.
Dieser lokale Identitätswert ist nicht Teil der übertragenen Datennutzlast. Es ist nicht anwendbar, sobald die Nachricht mit der Übertragung beginnt, und kann nicht mehr von PartyLocalEndpoint::CancelMessages() aus der lokalen Sendewarteschlange entfernt werden.
timeoutInMilliseconds
uint32_t
Die maximale Zeit in Millisekunden, in der die Nachricht in einer vom Partei verwalteten Sendewarteschlange verbleiben darf, die auf eine Übertragungschance wartet.
Wenn die Nachricht nicht mit der Übertragung begonnen hat, wenn dieses Timeout aufgrund der Verbindungsqualität oder der Empfängerreaktionsfähigkeit verstrichen ist, wird die Nachricht abgebrochen und aus der Warteschlange entfernt, ohne gesendet zu werden.
Der timeoutInMilliseconds
Wert 0 (null) gibt an, dass es kein Timeout geben sollte und dass die Nachricht in der Warteschlange bleiben soll, bis sie entweder erfolgreich übertragen, explizit abgebrochen wird oder ein Übertragungsfehler auftritt, z. B. die Remoteverbindung. Null ist die Standardeinstellung, wenn keine PartySendMessageQueuingConfiguration-Struktur für PartyLocalEndpoint::SendMessage() bereitgestellt wird.
Timeouts für nachrichtensende Warteschlangen können verhindern, dass Sendewarteschlangen bei schlechten Netzwerkbedingungen übermäßig wachsen. Sie funktionieren gut mit Nachrichten, die zeitkritische, periodische Daten enthalten, bei denen es eine Verschwendung von Bandbreite wäre, veraltete zu übertragen, da regelmäßig eine neuere vollständige Ersatznachricht gesendet wird und der Verlust einer einzelnen Nachricht nicht tödlich ist.
Dieser Timeoutwert wirkt sich nur auf die vom Partei verwaltete Sendewarteschlange aus. Dies wirkt sich nicht auf die Zeit aus, die benötigt wird, um eine Nachricht tatsächlich zu übertragen (Umgebungslatenz), noch ändert sie die Wartezeit, bis der Empfänger die Übertragung bestätigt, falls zutreffend.
Dieser Timeoutwert wird beim Senden an Ziele ohne direkte Peerverbindungen zweimal ausgewertet: einmal für die lokalen Sendewarteschlangen des sendenden Clients an das transparente Cloudrelay, die von lokalen Umgebungsbedingungen und Übertragungsraten an das Relay betroffen sind, und ein zweites Mal auf dem Relay selbst, das gezwungen werden kann, Nachrichten vor der Weiterleitung basierend auf unterschiedlichen Netzwerkbedingungen in die Warteschlange zu stellen. Übertragungsraten oder Reaktionsfähigkeit der Remoteziele.
Voraussetzungen
Header: Party.h