Ile znaków mieści się w wiadomości PubNub o rozmiarze 32 KB?
Published: 2024-02-21 13:48:25

Maksymalna długość wiadomości PubNub wynosi 32 KB (patrz: [dokumenty PubNub SDK](https://www.pubnub.com/docs) oraz [miękkie i twarde limity PubNub](https://www.pubnub.com/docs/sdks/javascript)). Jeśli przekracza 32 KB, wiadomość nie zostanie [dostarczona](https://support.pubnub.com/hc/en-us/articles/360051495852-What-happens-to-messages-that-exceed-the-size-limit). Ale co tak naprawdę oznacza 32 KB dla wiadomości? Jeśli tworzysz [rozwiązanie oparte na IoT](https://support.pubnub.com/hc/en-us/articles/360051495872-What-is-the-maximum-message-size), prawdopodobnie nie martwisz się zbytnio o rozmiar wiadomości. Prawdopodobnie wysyłasz tylko krótkie informacje aktualizacyjne, takie jak długość i szerokość geograficzna na potrzeby geolokalizacji, dane dotyczące temperatury lub czujników dla systemów wbudowanych lub krótkie instrukcje do sterowania oświetleniem lub innymi inteligentnymi urządzeniami. Podobnie, tabele liderów dla [gier online](https://www.pubnub.com/solutions/gaming/) w czasie rzeczywistym na dużą skalę z łatwością mieszczą się w 32KB. Istnieje jednak wiele przypadków użycia, które wymagają więcej informacji w pojedynczej wiadomości PubNub. Pomyśl o [wiadomościach na czacie](https://www.pubnub.com/solutions/chat/) lub analizach z [usługi kognitywnej](https://www.pubnub.com/blog/the-many-uses-of-cognitive-services/). W tym poście użyjemy wiadomości czatu jako naszego przykładu.

Wykonajmy kilka obliczeń matematycznych
---------------------------------------

Aby obliczyć całkowity rozmiar ładunku, musimy najpierw zdefiniować, jak może wyglądać wiadomość czatu. Wiadomość czatu do naszych obliczeń obejmuje cały ładunek: kanał, wszelkie informacje o "kanale bocznym" i sam tekst. Po spakowaniu przez PubNub będzie również zawierać informacje o kopercie, w tym znacznik czasu (timetoken) i inne informacje kontrolne potrzebne do routingu. Wiadomość publikowana z klienta może wyglądać mniej więcej tak:

```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."
};
```

Aby [obliczyć rozmiar](https://support.pubnub.com/hc/en-us) wiadomości, połącz nazwę kanału i ciąg ładunku wiadomości (JSON), zakoduj wynik URI (encodeURIComponent w Javascript), a następnie sprawdź długość wiadomości (String.length w Javascript). Najlepszą praktyką jest dodanie 100 do wyniku, aby uwzględnić informacje o kopercie PubNub (metadane). Zobacz nasz dokument pomocy technicznej, aby uzyskać [pełną funkcję Javascript](https://support.pubnub.com/hc/en-us) i pomysły na to, jak możesz ją ustrukturyzować dla jednego z ponad 70 innych obsługiwanych zestawów SDK.

Przykłady
---------

Teraz, gdy mamy już sposób na obliczenie rozmiaru wiadomości, zbadajmy możliwości PubNub API, analizując historyczne teksty i ich potencjalną transmisję jako wiadomości PubNub. Przykładowo, [Deklaracja Niepodległości](https://www.archives.gov/founding-docs/declaration-transcript) autorstwa Thomasa Jeffersona mogłaby zostać zakodowana jako wiadomość PubNub w następujący sposób:

```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."
};
```

Używając obiektów JSON jako treści wiadomości, wiadomość ta zajmuje 11,4 KB. W ten sposób pan Jefferson mógłby wysłać dwie kopie Deklaracji w pojedynczej wiadomości PubNub, pokazując wydajność PubNub API - globalną transmisję danych z minimalnym opóźnieniem w czasie krótszym niż 250 ms.

Rozważmy inny przykład, "Routine for a Hornet" autorstwa Dona Berry'ego, dzieło z [Project Gutenberg](https://www.gutenberg.org/). Dzięki funkcji trwałości wiadomości PubNub moglibyśmy zakodować znaczną część tej krótkiej historii:

```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."
};
```

W jednym ładunku można wysłać około 85% tego opowiadania z "The Worlds of Science Fiction", ale trzeba będzie zatrzymać się na cliffhangerze "...Nor could have taken his hands away from the controls in any case," i wysłać resztę w drugiej wiadomości. Ponieważ jednak każda wiadomość dociera w ciągu 50-250 ms, czas oczekiwania jest krótki. British Goblins: Welsh Folk-lore, Fairy Mythology, Legends and Traditions autorstwa Sikesa. Jest to długie tomiszcze (rozmiar pliku 773kB). Jeśli ktoś chciałby ją wysłać, musiałby podzielić ją na kilka części. W moich testach każdy rozdział każdej książki wypełnia nasz ładunek. Na przykład "KSIĄŻKA 1 Królestwo Faerie, Rozdział 1 - Bajki i starożytna mitologia..." ma rozmiar 23 KB. O Krainie Baśni można się wiele dowiedzieć.

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

Najlepsze praktyki
------------------

Jak widzieliśmy, 32KB to rozsądna ilość tekstu. Jednak najlepszą praktyką jest testowanie każdej wiadomości generowanej przez użytkownika pod kątem rozmiaru. Jeśli jest zbyt duża, mamy kilka sugestii, jak ją dostosować w naszym artykule pomocy technicznej "[Czy mogę wysyłać duże wiadomości za pomocą PubNub?](https://support.pubnub.com/hc/en-us/articles/360051495792-Can-I-send-large-messages-with-PubNub-#latest)" Pamiętaj również, że szyfrowanie wiadomości może dodać 30% i że wiadomości napisane w językach dwubajtowych zajmują więcej miejsca - zaplanuj odpowiednio. Pro Tip: Zachowanie rozmiaru wiadomości &lt; 1,5 KB pozwoli im zmieścić się w pojedynczym pakiecie TCP. Co z obrazami? Obrazy mogą być wysyłane po przekonwertowaniu na base-64. Ta konwersja dodaje znaczny narzut, więc ponownie przetestuj swój system. Zapoznaj się z naszym projektem demonstracyjnym [DIY klona Snapchata](https://www.pubnub.com/blog/diy-snapchat-clone-capture-send-images-javascript-tutorial/), aby poznać kilka pomysłów. Wreszcie, co to jest 250 ms? 250 milisekund to czas krótszy niż przeczytanie tego zdania. Dzięki 15 punktom obecności na całym świecie i opatentowanej architekturze czasu rzeczywistego, PubNub szybko dostarcza ładunki.

Refleksja końcowa
-----------------

Próba odpowiedzi na każde pytanie techniczne przed rozpoczęciem nowego projektu może być kusząca. Piękno PubNub SDK polega na tym, że rzadko istnieje tylko jeden właściwy sposób. Mamy wiele przykładów na naszym [blogu](https://www.pubnub.com/blog/), a jeśli utkniesz, skontaktuj się [z](https://support.pubnub.com/hc/en-us) nami - chcemy, abyś odniósł sukces. Jeśli stworzysz coś i udostępnisz to jako open source, napisz do naszego zespołu ds. relacji z [deweloperami](mailto:devrel@pubnub.com) - chętnie to zobaczymy.

### Ten blog jako wiadomość PubNub

```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."
};
```

Ten wpis na blogu ma rozmiar 10,5 tys.

### Pierwsze kroki

Zacznij korzystać z PubNub już dziś! Zarejestruj [konto](https://www.pubnub.com/docs/general/basics/set-up-your-account) PubNub, sprawdź swój zestaw kluczy, aby uzyskać klucz publikowania i klucz subskrypcji, i sprawdź wszystko, co PubNub ma do zaoferowania, w tym:

1.  [PubNub](https://www.pubnub.com/docs/messages/publish): Wysyłaj wiadomości za każdym razem, gdy dane wejściowe użytkownika są aktualizowane, takie jak aktualizacje tekstu, reakcje emoji, wysłane pliki i inne złożone dane. [metadane](https://www.pubnub.com/docs/metadata/channel-metadata).
    
2.  [Subskrybuj](https://www.pubnub.com/docs/messages/receive): Odbieraj nowe wiadomości, aby odświeżyć ekrany użytkowników.
    
3.  [Obecność](https://www.pubnub.com/docs/presence/overview): Aktualizacja i wykrywanie statusu online użytkowników.
    
4.  [Trwałość wiadomości](https://www.pubnub.com/docs/storage): Wyświetlanie wszelkich otrzymanych wiadomości po zalogowaniu się użytkowników do aplikacji lub śledzenie zmian w projektach i dokumentach.
    
5.  [Mobilne powiadomienia push](https://www.pubnub.com/docs/push/send): Powiadamiaj użytkowników mobilnych, którzy są z dala od aplikacji, o wszelkich wiadomościach na czacie, aktualizacjach projektu lub aktualizacjach aplikacji.
    
6.  [Kontekst aplikacji](https://www.pubnub.com/docs/general/metadata/channel-metadata): Przechowuj informacje o użytkowniku w jednym miejscu bez konieczności konfigurowania lub wywoływania bazy danych.
    
7.  [Access Manager](https://www.pubnub.com/docs/security/access-control): Ogranicz dostęp do prywatnych rozmów, kanałów, dokumentów i projektów dla określonych użytkowników.
    
8.  [Funkcje](https://www.pubnub.com/docs/general/serverless/functions/overview): Tłumaczenie wiadomości, cenzurowanie nieodpowiednich wiadomości, ogłaszanie przybycia nowych użytkowników i powiadamianie innych użytkowników o wzmiankach.
    
9.  [Wydarzenia i akcje](https://www.pubnub.com/docs/general/serverless/events-and-actions/overview): Centralne zarządzanie zdarzeniami w ekosystemie aplikacji i uruchamianie logiki biznesowej bez kodu.