Парсер MessagePack

MessagePack — это эффективный формат двоичной сериализации, похожий на JSON, но меньше и быстрее. Используется в Redis, Fluentd и многих RPC-системах. Этот инструмент разбирает файлы MessagePack и отображает содержимое как JSON с метаданными о типах и размерах.

Спецификации

Типичные сценарии использования

  • Отладка ответов API, закодированных в MessagePack
  • Просмотр кешированных данных Redis, сериализованных в MessagePack
  • Анализ сообщений логов Fluentd
  • Конвертация MessagePack в JSON для логирования или отладки
  • Понимание полезных нагрузок RPC в формате MessagePack

Возможности

  • Разбор двоичных файлов MessagePack через перетаскивание или выбор файла
  • Декодирование hex-кодированных данных MessagePack
  • Поддержка всех типов MessagePack, включая расширения
  • Конвертация в JSON для удобства чтения
  • Показ метаданных документа (размер, количество типов, максимальная глубина)
  • Отображение информации о типах расширений
  • Обработка двоичных данных и временных меток
  • Hex-просмотрщик для инспекции сырых двоичных данных

Примеры

Простой MessagePack

Попробовать →

MessagePack map с двумя полями: {"hello":"world","count":42}

82 a5 68 65 6c 6c 6f a5 77 6f 72 6c 64 a5 63 6f 75 6e 74 2a

Hex-кодированный MessagePack

Попробовать →

MessagePack map со строкой, числом и логическим значением: {"name":"Alice","age":30,"active":true}

83 a4 6e 61 6d 65 a5 41 6c 69 63 65 a3 61 67 65 1e a6 61 63 74 69 76 65 c3

Советы

  • Вы можете вставить hex-кодированные данные MessagePack напрямую для их разбора.
  • MessagePack обычно составляет 50-80% от размера эквивалентного JSON.
  • Типы расширений (отрицательные коды типов) определяются приложением.
  • Временные метки используют тип расширения -1 с различными форматами точности.
  • Некоторые реализации используют тип расширения 1 для временных меток.

Описание Парсер MessagePack

MessagePack — это формат двоичной сериализации, цель которого — быть максимально компактным при сохранении совместимости модели данных с JSON. Созданный Садаюки Фурухаси, MessagePack кодирует данные в самоописывающий двоичный формат, где информация о типах и данные чередуются, обеспечивая эффективный разбор без внешней схемы.

Формат использует схему кодирования переменной длины. Маленькие целые числа (0-127) помещаются в один байт. Короткие строки включают свою длину в байт типа. Карты и массивы используют компактные префиксы длины. Такой дизайн обычно даёт полезные нагрузки размером 50-80% от эквивалентного JSON, с значительно более быстрой сериализацией и десериализацией благодаря отсутствию накладных расходов на текстовый разбор.

MessagePack поддерживает nil, boolean, integer (знаковые и беззнаковые до 64 бит), float (32 и 64 бита), string, binary, array, map и типы расширений. Типы расширений позволяют приложениям определять пользовательские типы — расширение timestamp (тип -1) является единственным стандартизированным расширением. Библиотеки существуют для практически каждого языка программирования с согласованной межъязыковой совместимостью.

MessagePack используется в Redis (как необязательный формат сериализации), Fluentd (пересылка логов), SignalR (веб в реальном времени) и многих RPC-системах и протоколах сетевого взаимодействия игр, где пропускная способность и скорость разбора имеют значение. Это хороший выбор, когда желательна совместимость с JSON, но накладные расходы текстовой сериализации слишком велики.

MessagePack лучше всего подходит для сценариев, где критичны пропускная способность или скорость разбора: коммуникация в реальном времени, высоконагруженные API, сетевое взаимодействие в играх, устройства IoT и слои кеширования. JSON остаётся лучшим выбором, когда важна человекочитаемость, для файлов конфигурации или при взаимодействии с системами, ожидающими текстовые форматы.

По сравнению с Protocol Buffers MessagePack не требует схемы, как и JSON — данные самоописывающие и могут быть сериализованы без предопределённой схемы. Protocol Buffers требуют файл схемы .proto, компилируемый в код для конкретного языка, но дают меньшие полезные нагрузки и обеспечивают более строгую типобезопасность. MessagePack лучше подходит для динамических данных без схем, тогда как Protobuf превосходен для чётко определённых API-контрактов, где нужна максимальная эффективность.

Типы расширений позволяют приложениям определять пользовательские типы данных помимо встроенного набора. Каждое расширение имеет код типа (от -128 до 127) и произвольные двоичные данные. Расширение timestamp (тип -1) — единственное стандартизированное расширение, представляющее временные метки с точностью до наносекунд. Приложения могут определять собственные расширения для типов UUID, BigDecimal или доменно-специфичных объектов.

← Вернуться ко всем инструментам