Nachrichten und Verbindungen in Azure SignalR Service

Das Abrechnungsmodell für Azure SignalR Service basiert auf der Anzahl der Verbindungen und der Anzahl der ausgehenden Nachrichten vom Dienst. In diesem Artikel erfahren Sie, wie Nachrichten und Verbindungen definiert und für Abrechnungszwecke gezählt werden.

Nachrichtenformate

Azure SignalR Service unterstützt dieselben 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 Abruf- oder serverseitigen Ereignissen kann der Client keine Nachrichten senden, die größer als 1 MB sind.
    • 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 Standardwert ist 32 KB. Weitere Informationen finden Sie unter Sicherheitsüberlegungen zu ASP.NET Core SignalR.
    • Bei serverlosen Servern wird die Nachrichtengröße durch die Upstreamimplementierung begrenzt, aber unter 1 MB wird empfohlen.
  • Servernachrichten:
    • Es gibt keine Beschränkung auf die Größe von Servernachrichten, aber unter 16 MB wird empfohlen.
    • Der App-Server kann einen Grenzwert für die Clientnachrichtengröße festlegen. Der Standardwert ist 32 KB. Weitere Informationen finden Sie unter Sicherheitsüberlegungen zu ASP.NET Core SignalR.
    • Serverlose:
      • Rest-API: 1 MB für Den Nachrichtentext, 16 KB für Kopfzeilen.
      • Es gibt keine Beschränkung für WebSocket, Management SDK persis Zelt-Modus, aber unter 16 MB wird empfohlen.

Bei WebSocket-Clients werden große Nachrichten in kleinere Nachrichten aufgeteilt, die jeweils nicht mehr als 2 KB sind und separat übertragen werden. 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 vom Azure SignalR-Dienst 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 1-KB-Nachricht 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 der Clients gesendet werden, sind ausgehende Nachrichten und werden abgerechnet.

  • Wenn Client A eine 1 KB eingehende Nachricht an Client B sendet, ohne den App-Server zu durchlaufen, handelt es sich bei der Nachricht um eine kostenlose eingehende Nachricht. Die von Dienst zu Client B weitergeleitete Nachricht wird als ausgehende Nachricht abgerechnet.

  • Wenn Sie über drei Clients und einen Anwendungsserver verfügen, ist die Anzahl der abgerechneten Nachrichten acht, wenn ein Client eine 4-KB-Nachricht für die Serverübertragung an alle Clients sendet:

    • 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 Serververbindungsanzahl beträgt 50: (2 App-Server * 5 Hubs * 5 Verbindungen pro Hub).

Die in der Azure-Portal angezeigte Verbindungsanzahl umfasst Server-, Client-, Diagnose- und Live-Ablaufverfolgungsverbindungen. 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: Eine spezielle Art von Clientverbindung, die ein detaillierteres Protokoll erzeugen kann, was sich auf die Leistung auswirken kann. 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 Live-Ablaufverfolgungsverbindung wird nicht als Clientverbindung oder als 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 den Verbindungsstatus und nehmen Anpassungen an Serververbindungen vor, um eine bessere Leistung und Dienststabilität zu erzielen. Daher werden möglicherweise Änderungen an der Anzahl der Serververbindungen in Ihrem ausgeführten Dienst angezeigt.