- PVSM.RU - https://www.pvsm.ru -
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 упаковывает данные на 15-20% эффективнее чем JSON. В нагруженном проекте обмен сообщениями между компонентами системы насчитывает 100 тысяч в день и более. Экономя 15-20% трафика вы сможете обслуживать больше сообщений на одной ноде за тот же период времени.
Библиотека полностью совместима с JSON, но все же стоит знать некоторые ограничения:
Из этого следует, что в каждом из языков будет свое поведение. Например, в случае, если вы распаковываете данные на PHP будет автоматически сгенерировано:
Warning: [msgpack] (php_msgpack_unserialize) %s %d в ваш STDERR
Но его можно отключить используя php.ini через флаг msgpack.error_display=0 (по умолчанию 1);
Подробно со спецификацией упаковки данных вы можете ознакомится по адресу github.com/msgpack/msgpack/blob/master/spec.md [2]
Установка и настройка библиотеки весьма тривиальна и разработчики заботятся о том, чтобы не создавать трудности на этом этапе. Так в случае использования 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) есть ещё два undocument класса MessagePack и MessagePackUnpacker. Они имеют следующие интерфейсы:
MessagePack
MessagePack::__construct(boolean $opt = null); // $opt - управление поведением флага php.ini msgpack.php_only внутри класса
MessagePack::setOption(integer $option, boolean $value); // поддерживает только опцию MSGPACK_CLASS_OPT_PHPONLY
MessagePack::pack(mixed $value); // упаковывает данные и возвращает строку
MessagePack::unpack(string $str, $object = null); // распаковывает строку. Вторым параметром можно передать строку, объект, массив, который следует заполнить распакованными данными и вернуть в результате выполнения функции.
MessagePack::unpacker(); // возвращает объект класса MessagePackUnpacker. Обратите внимание, что в текущей реализации библиотеки при каждом обращении создается новый экземпляр класса.
MessagePackUnpacker
MessagePackUnpacker::__construct(boolean $opt = null); // $opt - управление поведением флага php.ini msgpack.php_only внутри класса
MessagePackUnpacker::__destruct();
MessagePackUnpacker::setOption(integer $option, boolean $value); // поддерживает только опцию MSGPACK_CLASS_OPT_PHPONLY
MessagePackUnpacker::feed(string $str); // Добавляет указанную строку к общему буферу. Возвращает true либо false.
MessagePackUnpacker::execute(string $str = null, integer &$offset = null); // Распаковывает данные. Возвращает true либо false.
MessagePackUnpacker::data(mixed $object = null); // В случае, если данные не были распакованы через метод execute возвращает false. В случае, если данные были распакованы и не был передан параметр $object - возвращает распакованную строку и вызывает метод reset. В случае, если данные были распакованы и был передан параметр $object работает по принципу MessagePack::unpack и вызывает метод reset.
MessagePackUnpacker::reset(); // очищает текущий буфер;
Официальный сайт разработчиков msgpack.org/ [3]
P.S.: к разработчикам библиотеки не отношусь. Использую её в работе 4 месяца.
Автор: AlexeyParhomenko
Источник [4]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/razrabotka/83648
Ссылки в тексте:
[1] IEEE 754: https://ru.wikipedia.org/wiki/IEEE_754-2008
[2] github.com/msgpack/msgpack/blob/master/spec.md: https://github.com/msgpack/msgpack/blob/master/spec.md
[3] msgpack.org/: http://msgpack.org/
[4] Источник: http://habrahabr.ru/post/251177/
Нажмите здесь для печати.