32KBのPubNubメッセージに収まる文字数は？
Published: 2024-02-21 13:53:26

PubNubメッセージの最大長は32KBです（参照：[PubNub SDK docs](https://www.pubnub.com/docs)and[PubNub soft and hard limits](https://www.pubnub.com/docs/sdks/javascript)）。32KBを超える場合、メッセージは[配信さ](https://support.pubnub.com/hc/en-us/articles/360051495852-What-happens-to-messages-that-exceed-the-size-limit)れません。 しかし、32KBのメッセージとは実際にはどのようなものでしょうか？[IoTベースのソリューションを](https://support.pubnub.com/hc/en-us/articles/360051495872-What-is-the-maximum-message-size)構築している場合、おそらくメッセージサイズをあまり気にすることはないでしょう。おそらく、ジオロケーション・ニーズのための経度や緯度、組み込みシステム用の温度やセンサー・データ、照明やその他のスマート家電を制御するための短い命令のような、短い更新情報を送信するだけでしょう。同様に、リアルタイムで大規模な[オンラインゲームの](https://www.pubnub.com/solutions/gaming/)リーダーボードは32KBに簡単に収まります。 しかし、1つのPubNubメッセージでより多くの情報を必要とする多くのユースケースがあります。[チャットメッセージや](https://www.pubnub.com/solutions/chat/) [コグニティブサービスからの](https://www.pubnub.com/blog/the-many-uses-of-cognitive-services/)分析を考えてみよう。この記事では、チャットメッセージを例に説明します。

数学をやってみよう
---------

ペイロードの合計サイズを計算するには、まず、チャットメッセージがどのようなものかを定義する必要があります。計算上のチャットメッセージには、ペイロード全体が含まれます：チャネル、任意の「サイドチャネル」情報、および実際のテキスト自体です。PubNubによってパッケージ化される場合、タイムスタンプ（timetoken）やルーティングに必要なその他の制御情報を含むエンベロープ情報も含まれます。 クライアントから発行されるメッセージは次のようになります：

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

[メッセージサイズを計算](https://support.pubnub.com/hc/en-us)するには、チャンネル名とメッセージのペイロード（JSON）文字列を組み合わせ、その結果をURIエンコード（JavascriptのencodeURIComponent）し、メッセージの長さ（JavascriptのString.length）をチェックします。ベストプラクティスは、PubNubエンベロープ（メタデータ）情報を考慮して結果に100を追加することです。[完全なJavascript関数と](https://support.pubnub.com/hc/en-us)、私たちの70以上の他のサポートされているSDKのいずれかのためにそれをどのように構成するかのアイデアについては、私たちのサポートドキュメントを参照してください。

例
-

メッセージサイズを計算する方法がわかったので、歴史的なテキストとPubNubメッセージとしての送信の可能性を調べることによって、PubNub APIの機能を探ってみましょう。例えば、Thomas Jeffersonによる[The Declaration of Independenceは](https://www.archives.gov/founding-docs/declaration-transcript)次のようにPubNubメッセージとしてエンコードできます:

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

メッセージの内容にJSONオブジェクトを使うと、このメッセージは11.4KBになる。このように、ジェファーソン氏は1つのPubNubメッセージで宣言の2つのコピーを送信することができ、PubNub APIの効率性 - 250ミリ秒未満で最小の待ち時間でグローバルなデータ伝送 - を示しています。

別の例として、[Project Gutenbergの](https://www.gutenberg.org/)作品であるDon Berryの "Routine for a Hornet "を考えてみよう。PubNubのメッセージ永続化機能を使えば、この短編小説のかなりの部分をエンコードできる：

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

1つのペイロードで、"The Worlds of Science Fiction "に収録されているこの短編の約85%を送ることができますが、"Nor could he had taken his hands away from the controls in any case "というクリフハンガーで止めて、残りを2つ目のメッセージで送る必要があります。しかし、各メッセージは50～250ミリ秒で届くので、待つ時間は短い。 イギリスのゴブリン：ウェールズの民間伝承、妖精神話、伝説と伝統』（Sikes著）。これは長い本だ（ファイルサイズ773kB）。もし誰かがこれを送りたければ、複数に分割する必要があるだろう。私のテストでは、各書の各章でペイロードがいっぱいになった。例えば、"BOOK1 フェアリーの王国 第1章 おとぎ話と古代の神話... "はそれだけで23KBである。フェアリーランドについて知ることは多い。

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

ベストプラクティス
---------

これまで見てきたように、32KBは妥当なテキスト量である。しかし、ユーザーが作成したすべてのメッセージのサイズをテストするのがベストプラクティスです。また、メッセージを暗号化すると30%追加されること、ダブルバイト言語で書かれたメッセージはより多くのスペースを占有することを忘れないでください。 プロのヒント：メッセージのサイズを1.5KBにすると、1つのTCPパケットに収まります。 画像はどうですか？画像はbase-64に変換して送信できます。この変換にはかなりのオーバーヘッドがかかるため、システムをテストする必要がある。[DIYスナップチャット・クローン・デモ・プロジェクトを](https://www.pubnub.com/blog/diy-snapchat-clone-capture-send-images-javascript-tutorial/)チェックしてみてください。 最後に、250ミリ秒とは何ですか？250ミリ秒は、あなたがこの文章を読むのにかかった時間よりも短い。PubNubは世界中に15の拠点を持ち、特許を取得したリアルタイム・アーキテクチャにより、あなたのペイロードを素早く配信します。

最後に
---

新しいプロジェクトを始める前に、すべての技術的な質問に答えようとしたくなることがあります。PubNub SDKの素晴らしさは、正しい方法が1つしかないことはほとんどないということです。私たちの[ブログには](https://www.pubnub.com/blog/)たくさんの例がありますし、行き詰まったら[手を差し伸べて](https://support.pubnub.com/hc/en-us)ください - 私たちはあなたの成功を望んでいます。もしあなたが何かを作ってオープンソース化したら、ぜひ[デベロッパーリレーションズチーム](mailto:devrel@pubnub.com)までご連絡ください。

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

このブログの投稿は10.5kです

### 始める

今すぐPubNubを始めましょう！[PubNubアカウントにサインアップして](https://www.pubnub.com/docs/general/basics/set-up-your-account)キーセットをチェックし、公開キーと購読キーを取得して、PubNubが提供するすべてのものをチェックしてください：

1.  [パブリッシュ](https://www.pubnub.com/docs/messages/publish):テキストの更新、絵文字のリアクション、送信されたファイル、その他の複雑なメタデータなど、ユーザーの入力が更新されるたびにメッセージを送信します。 [メタデータ](https://www.pubnub.com/docs/metadata/channel-metadata).
    
2.  [購読](https://www.pubnub.com/docs/messages/receive):新しいメッセージを受信して、ユーザーの画面をリフレッシュします。
    
3.  [プレゼンス](https://www.pubnub.com/docs/presence/overview):ユーザーのオンラインステータスを更新し、検出する。
    
4.  [メッセージの永続性](https://www.pubnub.com/docs/storage):ユーザーがアプリにログインすると、受信したメッセージを表示したり、プロジェクトやドキュメントのリビジョンを追跡します。
    
5.  [モバイルプッシュ通知](https://www.pubnub.com/docs/push/send):アプリから離れているモバイルユーザーに、チャットメッセージ、プロジェクトの更新、アプリケーションの更新を通知します。
    
6.  [アプリコンテキスト](https://www.pubnub.com/docs/general/metadata/channel-metadata):データベースをセットアップしたり、呼び出したりすることなく、ユーザーに関する情報を一箇所に保存します。
    
7.  [アクセスマネージャー](https://www.pubnub.com/docs/security/access-control):特定のユーザーのプライベートな会話、チャンネルルーム、ドキュメント、プロジェクトへのアクセスを制限します。
    
8.  [機能](https://www.pubnub.com/docs/general/serverless/functions/overview):メッセージの翻訳、不適切なメッセージの検閲、新しいユーザーの到着の通知、他のユーザーへの言及の通知。
    
9.  [イベント＆アクション](https://www.pubnub.com/docs/general/serverless/events-and-actions/overview):アプリケーションのエコシステム内のイベントを一元管理し、コードなしでビジネスロジックをトリガーします。