Wie viele Zeichen passen in eine 32KB PubNub-Nachricht?
Published: 2024-02-21 13:42:25

Die maximale Länge einer PubNub-Nachricht beträgt 32KB (siehe: [PubNub SDK docs](https://www.pubnub.com/docs) und [PubNub soft and hard limits](https://www.pubnub.com/docs/sdks/javascript)). Wenn sie mehr als 32KB groß ist, wird Ihre Nachricht [nicht zugestellt](https://support.pubnub.com/hc/en-us/articles/360051495852-What-happens-to-messages-that-exceed-the-size-limit). Aber wie sehen 32KB für eine Nachricht wirklich aus? Wenn Sie eine [IoT-basierte Lösung](https://support.pubnub.com/hc/en-us/articles/360051495872-What-is-the-maximum-message-size) aufbauen, machen Sie sich wahrscheinlich nicht allzu viele Gedanken über die Nachrichtengröße. Wahrscheinlich senden Sie nur kurze Aktualisierungsinformationen, wie Längen- und Breitengrad für Geolokalisierungszwecke, Temperatur- oder Sensordaten für eingebettete Systeme oder kurze Anweisungen zur Steuerung von Lampen oder anderen intelligenten Geräten. Ebenso passen Leaderboards für groß angelegte [Online-Spiele](https://www.pubnub.com/solutions/gaming/) in Echtzeit problemlos in 32 KB. Aber es gibt viele Anwendungsfälle, die mehr Informationen in einer einzigen PubNub-Nachricht erfordern. Denken Sie an [Chat-Nachrichten](https://www.pubnub.com/solutions/chat/) oder Analysen eines [kognitiven Dienstes](https://www.pubnub.com/blog/the-many-uses-of-cognitive-services/). In diesem Beitrag werden wir eine Chat-Nachricht als Beispiel verwenden.

Machen wir ein paar Berechnungen
--------------------------------

Um die Gesamtgröße eines Payloads zu ermitteln, müssen wir zunächst definieren, wie eine Chat-Nachricht aussehen könnte. Eine Chat-Nachricht für unsere Berechnungszwecke umfasst die gesamte Nutzlast: den Kanal, alle Seitenkanalinformationen und den eigentlichen Text. Wenn sie von PubNub verpackt wird, enthält sie auch Umschlaginformationen, einschließlich des Zeitstempels (timetoken) und anderer Kontrollinformationen, die für das Routing benötigt werden. Die Nachricht, die Sie von einem Client veröffentlichen, könnte etwa so aussehen:

```js
var channel = "doc_patient_comms_a";
var message = {
    "name" : "Dr. Blackwell",
    "company" : "Sunnydale Memorial",
    "uuid" : "uuid-string",
    "text" : "Your test results are back and everything looks normal."
};
```

Um [die Größe der Nachricht zu berechnen](https://support.pubnub.com/hc/en-us), kombinieren Sie den Kanalnamen und die Nutzlast (JSON), kodieren das Ergebnis als URI (encodeURIComponent in Javascript) und überprüfen dann die Länge der Nachricht (String.length in Javascript). Eine bewährte Methode ist es, 100 zum Ergebnis hinzuzufügen, um die PubNub-Umschlagdaten (Metadaten) zu berücksichtigen. In unserem Support-Dokument finden Sie eine [vollständige Javascript-Funktion](https://support.pubnub.com/hc/en-us) und Ideen, wie Sie diese für eines unserer über 70 unterstützten SDKs strukturieren könnten.

Beispiele
---------

Da wir nun eine Möglichkeit haben, die Nachrichtengröße zu berechnen, wollen wir die Möglichkeiten der PubNub-API anhand historischer Texte und ihrer möglichen Übertragung als PubNub-Nachrichten erkunden. [Die Unabhängigkeitserklärung](https://www.archives.gov/founding-docs/declaration-transcript) von Thomas Jefferson könnte beispielsweise auf folgende Weise als PubNub-Nachricht kodiert werden:

```js
var channel = "continental_congress_declaration_subcommittee";
var message = {
    "name" : "Mr. Jefferson",
    "uuid" : "4f4ec1b4-4957-4125-9103-c6edcfe37770",
    "text" : "The unanimous Declaration of the thirteen united States of America, When in the Course of human events[…]our sacred Honor."
};
```

Bei Verwendung von JSON-Objekten für den Nachrichteninhalt beträgt die Größe dieser Nachricht 11,4 KB. So konnte Herr Jefferson zwei Kopien der Erklärung in einer einzigen PubNub-Nachricht versenden, was die Effizienz der PubNub-API verdeutlicht - globale Datenübertragung mit minimaler Latenzzeit in weniger als 250 ms.

Ein weiteres Beispiel ist "Routine for a Hornet" von Don Berry, ein Werk des [Project Gutenberg](https://www.gutenberg.org/). Mit der Nachrichtenpersistenzfunktion von PubNub könnten wir einen großen Teil dieser Kurzgeschichte kodieren:

```js
var channel = "worlds_of_science_fiction_editors";
var message = {
    "name" : "Don Berry",
    "uuid" : "99c8361f-ac61-47f5-9b5f-22095227e6e3",
    "text" : "ROUTINE for a HORNET[…]in any case."
};
```

In einem Payload kann man etwa 85% dieser Kurzgeschichte aus "The Worlds of Science Fiction" verschicken, aber man muss bei dem Cliffhanger "...Nor could he have taken his hands away from the controls in any case" aufhören und den Rest in einer zweiten Nachricht verschicken. Da jede Nachricht in 50-250ms eintrifft, ist die Wartezeit jedoch kurz. British Goblins: Welsh Folk-lore, Fairy Mythology, Legends and Traditions von Sikes. Dies ist ein langer Wälzer (773kB Dateigröße). Wenn man es verschicken wollte, müsste man es in mehrere Teile aufteilen. Bei meinen Tests füllt jedes Kapitel eines jeden Buches unsere Nutzlast aus. Zum Beispiel ist "BOOK 1 The Realm of Faerie, Chapter 1 - Fairy Tales and the Ancient Mythology..." allein schon 23KB groß. Es gibt viel über das Feenreich zu wissen.

```js
var channel = "british_goblin_researchers";
var message = {
    "name" : "Sikes",
    "uuid" : "8044e839-a3b2-4bab-b2d1-c52897299cf5",
    "text" : "BOOK I.[…]'Welsh Melodies.'"
};
```

Bewährte Praktiken
------------------

Wie wir gesehen haben, sind 32 KB eine angemessene Textmenge. Es empfiehlt sich jedoch, jede von Benutzern erstellte Nachricht auf ihre Größe zu prüfen. Wenn sie zu groß ist, finden Sie in unserem Support-Artikel "[Kann ich mit PubNub große Nachrichten versenden?](https://support.pubnub.com/hc/en-us/articles/360051495792-Can-I-send-large-messages-with-PubNub-#latest)" einige Vorschläge zur Anpassung. Denken Sie auch daran, dass die Verschlüsselung von Nachrichten 30 % mehr ausmachen kann und dass Nachrichten, die in Doppelbyte-Sprachen verfasst sind, mehr Platz benötigen - planen Sie entsprechend. Pro-Tipp: Wenn Sie die Größe Ihrer Nachrichten auf &lt; 1,5KB beschränken, passen sie in ein einziges TCP-Paket. Was ist mit Bildern? Bilder können gesendet werden, wenn sie in Base-64 konvertiert werden. Diese Konvertierung bedeutet einen erheblichen Mehraufwand, daher sollten Sie Ihr System erneut testen. In unserem [DIY Snapchat-Klon-Demoprojekt](https://www.pubnub.com/blog/diy-snapchat-clone-capture-send-images-javascript-tutorial/) finden Sie einige Ideen. Und schließlich: Was sind 250 ms? 250 Millisekunden sind kürzer, als Sie zum Lesen dieses Satzes gebraucht haben. Mit 15 Präsenzpunkten auf der ganzen Welt und einer patentierten Echtzeitarchitektur liefert PubNub Ihre Nutzdaten schnell aus.

Ein letzter Gedanke
-------------------

Es kann verlockend sein, jede technische Frage zu beantworten, bevor man ein neues Projekt beginnt. Das Schöne an den PubNub SDKs ist, dass es selten nur einen richtigen Weg gibt. Wir haben viele Beispiele in unserem [Blog](https://www.pubnub.com/blog/) und wenn Sie nicht weiterkommen, [wenden](https://support.pubnub.com/hc/en-us) Sie sich an uns - wir wollen, dass Sie erfolgreich sind. Wenn Sie etwas bauen und als Open Source zur Verfügung stellen, schicken Sie eine Nachricht an unser [Developer Relations Team](mailto:devrel@pubnub.com) - wir würden uns freuen, es zu sehen.

### Dieser Blog als PubNub-Botschaft

```js
var channel = "my_channel";
var message = {
    "name" : "Mark Williams",
    "uuid" : "d75dace8-1f15-4b8e-80a3-646ad97b58de",
    "text" : "The maximum length […] we would love to see it."
};
```

Dieser Blogbeitrag ist 10.5k

### Erste Schritte

Starten Sie noch heute mit PubNub! Melden Sie [sich für einen PubNub-Account an](https://www.pubnub.com/docs/general/basics/set-up-your-account), überprüfen Sie Ihr Keyset, um Ihren Veröffentlichungs- und Abo-Schlüssel zu erhalten, und sehen Sie sich alles an, was PubNub zu bieten hat:

1.  [Veröffentlichen](https://www.pubnub.com/docs/messages/publish): Senden Sie Nachrichten, wenn Benutzereingaben aktualisiert werden, wie Textaktualisierungen, Emoji-Reaktionen, gesendete Dateien und andere komplexe [Metadaten](https://www.pubnub.com/docs/metadata/channel-metadata).
    
2.  [Abonnieren](https://www.pubnub.com/docs/messages/receive): Empfangen Sie neue Nachrichten, um die Bildschirme der Benutzer zu aktualisieren.
    
3.  [Anwesenheit](https://www.pubnub.com/docs/presence/overview): Aktualisierung und Erkennung des Online-Status der Benutzer.
    
4.  [Persistenz der Nachricht](https://www.pubnub.com/docs/storage): Zeigen Sie alle empfangenen Nachrichten an, sobald sich die Benutzer bei der App anmelden, oder verfolgen Sie Projekt- und Dokumentänderungen.
    
5.  [Mobile Push-Benachrichtigungen](https://www.pubnub.com/docs/push/send): Benachrichtigen Sie mobile Benutzer, die sich nicht in der App befinden, über Chat-Nachrichten, Projekt- oder Anwendungsaktualisierungen.
    
6.  [App-Kontext](https://www.pubnub.com/docs/general/metadata/channel-metadata): Speichern Sie Informationen über Ihre Benutzer an einem Ort, ohne Ihre Datenbank einrichten oder aufrufen zu müssen.
    
7.  [Zugriffsmanager](https://www.pubnub.com/docs/security/access-control): Schränken Sie den Zugang zu privaten Gesprächen, Channel-Räumen, Dokumenten und Projekten für bestimmte Benutzer ein.
    
8.  [Funktionen](https://www.pubnub.com/docs/general/serverless/functions/overview): Übersetzen Sie Nachrichten, zensieren Sie unangemessene Nachrichten, kündigen Sie die Ankunft neuer Nutzer an und benachrichtigen Sie andere Nutzer über Erwähnungen.
    
9.  [Ereignisse & Aktionen](https://www.pubnub.com/docs/general/serverless/events-and-actions/overview): Verwalten Sie Ereignisse im Ökosystem Ihrer Anwendung zentral und lösen Sie Geschäftslogik ohne Code aus.