Nachrichten und Verbindungen in Azure SignalR Service
Das Abrechnungsmodell für Azure SignalR Service basiert auf der Anzahl von Verbindungen und von der Anzahl der vom Dienst ausgehenden Nachrichten. In diesem Artikel erfahren Sie, wie Nachrichten und Verbindungen definiert und für Abrechnungszwecke gezählt werden.
Nachrichtenformate
Azure SignalR Service unterstützt die gleichen Formate wie ASP.NET Core SignalR: JSON und MessagePack.
Nachrichtengröße
Die folgenden Grenzwerte gelten für Nachrichten vom Azure SignalR Service:
- Clientnachrichten:
- Bei langen Abfrage- oder serverseitigen Ereignissen kann der Client keine Nachrichten über 1 MB senden.
- Es gibt keine Größenbeschränkung für WebSocket für den Dienst.
- Der App-Server kann einen Grenzwert für die Clientnachrichtengröße festlegen. Der Standard beträgt 32 KB. Weitere Informationen finden Sie unter Sicherheitsüberlegungen zu ASP.NET Core SignalR.
- In serverlosen Umgebungen wird die Nachrichtengröße durch die Upstreamimplementierung beschränkt, aber weniger als 1 MB wird empfohlen.
- Servernachrichten:
- Es gibt keinen Grenzwert für die Größe von Servernachrichten, aber unter 16 MB wird empfohlen.
- Der App-Server kann einen Grenzwert für die Clientnachrichtengröße festlegen. Der Standard beträgt 32 KB. Weitere Informationen finden Sie unter Sicherheitsüberlegungen zu ASP.NET Core SignalR.
- Serverlos:
- Rest-API: 1 MB für Nachrichtentext, 16 KB für Header.
- Es gibt keinen Grenzwert für WebSocket, den beständigen Modus des Verwaltungs-SDK, aber unter 16 MB wird empfohlen.
Für WebSocket-Clients werden große Nachrichten in kleinere Nachrichten mit einer Größe von jeweils maximal 2 KB aufgeteilt und separat übertragen. Das Aufteilen und Zusammensetzen der Meldungen wird von SDKs erledigt. Hierfür ist kein Entwickleraufwand erforderlich.
Große Nachrichten wirken sich negativ auf die Leistung der Nachrichtenübermittlung aus. Verwenden Sie nach Möglichkeit kleinere Nachrichten, und bestimmen Sie anhand von Tests die optimale Nachrichtengröße für das jeweilige Szenario.
Zählung von Nachrichten für die Abrechnung
Nachrichten, die an den Dienst gesendet werden, sind eingehende Nachrichten, und Nachrichten, die aus dem Dienst gesendet werden, sind ausgehende Nachrichten. Für die Abrechnung werden nur ausgehende Nachrichten von Azure SignalR Service gezählt. Pingnachrichten zwischen Clients und Servern werden ignoriert.
Nachrichten mit einer Größe von mehr als 2 KB werden als mehrere Nachrichten mit jeweils 2 KB gezählt. Das Diagramm mit der Nachrichtenanzahl im Azure-Portal wird hubspezifisch alle 100 Nachrichten aktualisiert.
Beispiel: Angenommen, Sie verfügen über einen Anwendungsserver und drei Clients:
Wenn der Anwendungsserver eine Nachricht mit 1 KB an alle verbundenen Clients sendet, gilt die Nachricht vom Anwendungsserver an den Dienst als kostenlose eingehende Nachricht. Die drei Nachrichten, die vom Dienst an jeden Client gesendet werden, gelten als ausgehende Nachrichten und werden abgerechnet.
Wenn Client A eine eingehende Nachricht mit einer Größe von 1 KB an Client B sendet, ohne dabei den Anwendungsserver zu durchlaufen, gilt diese Nachricht als kostenlose eingehende Nachricht. Die Nachricht, die vom Dienst an Client B geroutet wird, wird als ausgehende abgerechnet.
Wenn ein Client eine Nachricht mit einer Größe von 4 KB für die Serverübertragung an alle Clients sendet, und es drei Clients und einen Anwendungsserver gibt, beträgt die Anzahl der abgerechneten Nachrichten acht:
- Eine Nachricht vom Dienst an den Anwendungsserver.
- Drei Nachrichten vom Dienst an die Clients. Jede Nachricht wird als zwei Nachrichten mit jeweils 2 KB gezählt.
Zählung von Verbindungen
Der Azure SignalR-Dienst erstellt Anwendungsserver und Clientverbindungen. Standardmäßig beginnt jeder Anwendungsserver mit fünf Anfangsverbindungen pro Hub, und jeder Client hat eine Clientverbindung.
Ein Beispiel: Angenommen, Sie verfügen über zwei Anwendungsserver und definieren fünf Hubs im Code. Die Anzahl der Serververbindungen beträgt 50: (2 Anwendungsserver * 5 Hubs * 5 Verbindungen pro Hub).
Die im Azure-Portal angezeigte Anzahl von Verbindungen umfasst Server-, Client- und Diagnoseverbindungen sowie Verbindungen für Liveablaufverfolgungen. Die Verbindungstypen werden in der folgenden Liste definiert:
- Serververbindung: Verbindet den Azure SignalR Service mit dem App-Server.
- Clientverbindung: Verbindet den Azure SignalR Service mit der Client-App.
- Diagnoseverbindung: Ein besonderer Typ Clientverbindung, der ein ausführlicheres Protokoll liefern kann, was sich möglicherweise auf die Leistung auswirkt. Diese Art von Client ist für die Problembehandlung konzipiert.
- Verbindung für Liveablaufverfolgungen: Es wird eine Verbindung mit dem Endpunkt der Liveablaufverfolgung hergestellt und Liveablaufverfolgungen werden vom Azure SignalR Service empfangen.
Eine Verbindung für Liveablaufverfolgungen wird nicht als Client- oder Serververbindung gezählt.
Bei ASP.NET SignalR werden Serververbindungen anders berechnet. In diesem Fall ist zusätzlich zu den definierten Hubs ein einzelner Standardhub enthalten. Jeder Anwendungsserver benötigt standardmäßig fünf weitere anfängliche Serververbindungen. Die Anzahl anfänglicher Verbindungen für den Standardhub bleibt mit anderen Hubs konsistent.
Der Dienst und der Anwendungsserver synchronisieren weiterhin den Verbindungsstatus und passen die Serververbindungen an, um eine höhere Leistung und Dienststabilität zu erzielen. Daher werden in Ihrem ausgeführten Dienst möglicherweise Änderungen bei der Anzahl der Serververbindungen angezeigt.