MessagePackは効率的なバイナリデータシリアライザーです。

このライブラリを使用すると、JSON形式を使用するのと同じ方法で、システムコンポーネント間でメッセージを交換できます。 ライブラリの解釈は44のプログラミング言語に存在します(!)
PHPのいくつかの簡単な視覚的な例:
php -r 'echo strlen(json_encode(array("Hello World!")));' // 16 php -r 'echo strlen(msgpack_pack(array("Hello World!")));' // 14
php -r 'echo strlen(msgpack_pack(array("Hello World!", "Hello World!")));' // 27 php -r 'echo strlen(json_encode(array("Hello World!", "Hellow World!")));' // 32
php -r 'echo strlen(json_encode(array("Hello World!" => "Hello World!")));' // 31 php -r 'echo strlen(msgpack_pack(array("Hello World!" => "Hello World!")));' // 27
これらの合成例は、MessagePackがJSONよりも15〜20%効率的にデータをパックすることを示しています。 忙しいプロジェクトでは、システムコンポーネント間のメッセージングは1日に10万以上になります。 トラフィックを15〜20%節約すると、同じ期間に1つのノードでより多くのメッセージを配信できます。
ライブラリはJSONと完全に互換性がありますが、まだいくつかの制限を知っている必要があります。
- 整数は-(2 ^ 63)から(2 ^ 64)-1に制限されています。
- フロートは、単精度または倍精度のIEEE 754標準で表されます。
- バイナリオブジェクトの最大長は(2 ^ 32)-1です。
- 文字列バイトの最大サイズ(2 ^ 32)-1;
- 文字列に無効なバイトシーケンスが含まれている可能性があります。 この状況では、デシリアライザーの動作は、無効なバイトシーケンスを受信したときの実際の実装に依存します。
したがって、各言語には独自の動作があります。 たとえば、データをPHPに解凍すると、自動的に生成されます:
警告:[msgpack](php_msgpack_unserialize)%s%d in STDERR
ただし、フラグmsgpack.error_display = 0(デフォルトは1)を使用して、php.iniを使用して無効にすることができます。
- 配列内の要素の最大数は、(2 ^ 32)-1以下です。
- 連想配列(キー=>値)の要素の最大数は、(2 ^ 32)-1以下です。
github.com/msgpack/msgpack/blob/master/spec.mdでデータパッケージの仕様について詳しく読むことができます。
ライブラリのインストールと構成は非常に簡単であり、開発者はこの段階で問題が発生しないように注意します。 そのため、PHPを使用する場合、すべて使い慣れたデザインになります。
pecl install msgpack
Pythonの例:
pip install u-msgpack-python // easy_install u-msgpack-python
Rubyの場合:
gem install msgpack
図書館は3年以上前のものです。
現時点でのPHPの拡張機能の最新の現在のバージョンは0.5.5です。
標準関数msgpack_packとmsgpack_unpack(msgpack_serializeとmsgpack_unserializeのエイリアス)に加えて、さらに2つのundocumentクラスMessagePackとMessagePackUnpackerがあることに注意してください。 次のインターフェースがあります。
メッセージパック
MessagePack::__construct(boolean $opt = null);
MessagePackUnpacker
MessagePackUnpacker::__construct(boolean $opt = null);
公式
msgpack.org開発者
サイトPS:私は図書館の開発者に属していません。 私はそれを4か月間使用しています。