Combien de caractères peuvent contenir un message PubNub de 32 Ko ?
Published: 2024-02-21 14:03:28

La longueur maximale d'un message PubNub est de 32KB (voir : [PubNub SDK docs](https://www.pubnub.com/docs) et [PubNub soft and hard limits](https://www.pubnub.com/docs/sdks/javascript)). Si votre message dépasse 32KB, il [ne sera pas délivré](https://support.pubnub.com/hc/en-us/articles/360051495852-What-happens-to-messages-that-exceed-the-size-limit). Mais à quoi ressemblent vraiment 32KB pour un message ? Si vous construisez une [solution basée sur l'IoT](https://support.pubnub.com/hc/en-us/articles/360051495872-What-is-the-maximum-message-size), vous n'êtes probablement pas trop préoccupé par la taille du message. Vous ne faites probablement qu'envoyer de brèves informations de mise à jour, comme la longitude et la latitude pour les besoins de géolocalisation, des données de température ou de capteur pour les systèmes intégrés, ou de brèves instructions pour contrôler les lumières ou d'autres appareils intelligents. De même, les tableaux de classement pour les [jeux en ligne](https://www.pubnub.com/solutions/gaming/) à grande échelle et en temps réel tiennent facilement dans 32 Ko. Mais il existe de nombreux cas d'utilisation qui nécessitent plus d'informations dans un seul message PubNub. Pensez aux [messages de chat](https://www.pubnub.com/solutions/chat/) ou à l'analyse d'un [service cognitif](https://www.pubnub.com/blog/the-many-uses-of-cognitive-services/). Dans ce billet, nous utiliserons un message de chat comme exemple.

Faisons un peu de maths
-----------------------

Pour calculer la taille totale d'une charge utile, nous devons tout d'abord définir à quoi peut ressembler un message de chat. Pour notre calcul, un message de chat comprend l'ensemble de la charge utile : le canal, toute information "side channel" et le texte proprement dit. Lorsqu'il est emballé par PubNub, il comprendra également des informations d'enveloppe, notamment l'horodatage (timetoken) et d'autres informations de contrôle nécessaires au routage. Le message que vous publiez à partir d'un client peut ressembler à quelque chose comme cela :

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

Pour [calculer la taille du message](https://support.pubnub.com/hc/en-us), combinez le nom du canal et la chaîne de la charge utile du message (JSON), encodez le résultat par URI (encodeURIComponent en Javascript) et vérifiez ensuite la longueur du message (String.length en Javascript). Une bonne pratique consiste à ajouter 100 au résultat pour tenir compte des informations de l'enveloppe PubNub (métadonnées). Voir notre document de support pour une [fonction Javascript complète](https://support.pubnub.com/hc/en-us) et pour des idées sur la façon dont vous pourriez la structurer pour l'un de nos 70+ autres SDKs supportés.

Exemples d'application
----------------------

Maintenant que nous disposons d'un moyen de calculer la taille d'un message, explorons les capacités de l'API PubNub en examinant des textes historiques et leur transmission potentielle en tant que messages PubNub. Par exemple, [la Déclaration d'indépendance de](https://www.archives.gov/founding-docs/declaration-transcript) Thomas Jefferson pourrait être encodée comme un message PubNub de la manière suivante :

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

En utilisant des objets JSON pour le contenu du message, ce dernier pèse 11,4 Ko. Ainsi, M. Jefferson pourrait envoyer deux copies de la Déclaration dans un seul message PubNub, démontrant l'efficacité de l'API PubNub - transmission globale de données avec une latence minimale en moins de 250 ms.

Prenons un autre exemple, "Routine for a Hornet" de Don Berry, une œuvre du [Projet Gutenberg](https://www.gutenberg.org/). Grâce à la fonction de persistance des messages de PubNub, nous pourrions encoder une partie importante de cette nouvelle :

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

Dans un seul message, vous pouvez envoyer environ 85% de cette nouvelle tirée de "The Worlds of Science Fiction", mais vous devrez vous arrêter au cliffhanger "...Nor could he have taken his hands away from the controls in any case", et envoyer le reste dans un second message. Cependant, comme chaque message arrive en 50-250 ms, l'attente est courte. Gobelins britanniques : Welsh Folk-lore, Fairy Mythology, Legends and Traditions par Sikes. Il s'agit d'un long tome (taille du fichier 773kB). Si quelqu'un voulait l'envoyer, il faudrait le diviser en plusieurs parties. Lors de mes tests, chaque chapitre de chaque livre remplit notre charge utile. Par exemple, "LIVRE 1 Le royaume des fées, chapitre 1 - Contes de fées et mythologie ancienne..." représente à lui seul 23 Ko. Il y a beaucoup à savoir sur le royaume des fées.

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

Meilleures pratiques
--------------------

Comme nous l'avons vu, 32 Ko est une quantité raisonnable de texte. Toutefois, la meilleure pratique consiste à tester la taille de chaque message généré par l'utilisateur. S'il est trop grand, nous avons quelques suggestions sur la façon de l'adapter dans notre article de support "[Puis-je envoyer des messages volumineux avec PubNub ?](https://support.pubnub.com/hc/en-us/articles/360051495792-Can-I-send-large-messages-with-PubNub-#latest)" N'oubliez pas non plus que le cryptage des messages peut ajouter 30% et que les messages écrits dans des langues à deux octets prennent plus de place - planifiez en conséquence. Conseil de pro : Si vos messages ont une taille de 1,5 Ko, ils pourront tenir dans un seul paquet TCP. Qu'en est-il des images ? Les images peuvent être envoyées lorsqu'elles sont converties en base-64. Cette conversion ajoute une surcharge significative, donc, encore une fois, testez votre système. Consultez notre projet de démonstration de [clone de Snapchat](https://www.pubnub.com/blog/diy-snapchat-clone-capture-send-images-javascript-tutorial/) pour avoir quelques idées. Enfin, qu'est-ce que 250 ms ? 250 millisecondes, c'est le temps qu'il vous a fallu pour lire cette phrase. Avec 15 points de présence dans le monde et une architecture en temps réel brevetée, PubNub livre vos données rapidement.

Une dernière réflexion
----------------------

Il peut être tentant d'essayer de répondre à toutes les questions techniques avant de commencer un nouveau projet. La beauté des SDKs PubNub est qu'il y a rarement une seule bonne façon de faire. Nous avons beaucoup d'exemples sur notre [blog](https://www.pubnub.com/blog/) et si vous êtes bloqué, [contactez-nous](https://support.pubnub.com/hc/en-us) - nous voulons que vous réussissiez. Si vous construisez quelque chose et que vous le mettez en open source, envoyez un message à notre [équipe de relations avec les développeurs](mailto:devrel@pubnub.com) - nous serions ravis de le voir.

### Ce blog en tant que message 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."
};
```

Ce billet de blog fait 10.5k

### Commencer

Commencez avec PubNub dès aujourd'hui ! [Inscrivez-vous pour un compte PubNub](https://www.pubnub.com/docs/general/basics/set-up-your-account), vérifiez votre jeu de clés pour obtenir votre clé de publication et votre clé d'abonnement, et découvrez tout ce que PubNub a à offrir, y compris :

1.  [Publier](https://www.pubnub.com/docs/messages/publish): Envoyer des messages à chaque fois qu'une entrée utilisateur est mise à jour, comme des mises à jour de texte, des réactions emoji, des fichiers envoyés et d'autres données complexes. [métadonnées complexes](https://www.pubnub.com/docs/metadata/channel-metadata).
    
2.  [S'abonner](https://www.pubnub.com/docs/messages/receive): Recevoir de nouveaux messages pour actualiser les écrans des utilisateurs.
    
3.  [Présence](https://www.pubnub.com/docs/presence/overview): Mise à jour et détection du statut en ligne des utilisateurs.
    
4.  [Persistance des messages](https://www.pubnub.com/docs/storage): Affichez tous les messages reçus une fois que les utilisateurs se connectent à l'application ou suivez les révisions de projets et de documents.
    
5.  [Notifications push mobiles](https://www.pubnub.com/docs/push/send): Notifiez aux utilisateurs mobiles qui ne sont pas dans l'application les messages de chat, les mises à jour de projets ou les mises à jour d'applications.
    
6.  [Contexte de l'application](https://www.pubnub.com/docs/general/metadata/channel-metadata): Stockez les informations sur vos utilisateurs en un seul endroit sans avoir à configurer ou à appeler votre base de données.
    
7.  [Gestionnaire d'accès](https://www.pubnub.com/docs/security/access-control): Limitez l'accès aux conversations privées, aux salles de discussion, aux documents et aux projets pour des utilisateurs spécifiques.
    
8.  [Fonctions](https://www.pubnub.com/docs/general/serverless/functions/overview): Traduire les messages, censurer les messages inappropriés, annoncer l'arrivée de nouveaux utilisateurs et informer les autres utilisateurs des mentions.
    
9.  [Événements et actions](https://www.pubnub.com/docs/general/serverless/events-and-actions/overview): Gérez de manière centralisée les événements dans l'écosystème de votre application et déclenchez une logique commerciale sans code.