Parser MessagePack

MessagePack to wydajny binarny format serializacji, podobny do JSON, ale mniejszy i szybszy. Jest używany w Redis, Fluentd i wielu systemach RPC. To narzędzie parsuje pliki MessagePack i wyświetla zawartość jako JSON z metadanymi o typach i rozmiarach.

Specyfikacje

Typowe zastosowania

  • Debugowanie odpowiedzi API zakodowanych w MessagePack
  • Inspekcja zbuforowanych danych Redis serializowanych za pomocą MessagePack
  • Analiza wiadomości logów Fluentd
  • Konwersja MessagePack do JSON do logowania lub debugowania
  • Zrozumienie payloadów RPC w formacie MessagePack

Funkcje

  • Parsowanie binarnych plików MessagePack przez przeciągnij-i-upuść lub wybór pliku
  • Dekodowanie danych MessagePack zakodowanych szesnastkowo
  • Obsługa wszystkich typów MessagePack, w tym rozszerzeń
  • Konwersja do JSON dla czytelności
  • Pokazywanie metadanych dokumentu (rozmiar, liczba typów, maksymalna głębokość)
  • Wyświetlanie informacji o typach rozszerzeń
  • Obsługa danych binarnych i znaczników czasu
  • Przeglądarka hex do inspekcji surowych danych binarnych

Przyklady

Prosty MessagePack

Wypróbuj →

Mapa MessagePack z dwoma polami: {"hello":"world","count":42}

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

MessagePack zakodowany szesnastkowo

Wypróbuj →

Mapa MessagePack z ciągiem znaków, liczbą i wartością logiczną: {"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

Wskazowki

  • Możesz wkleić dane MessagePack zakodowane szesnastkowo bezpośrednio, aby je sparsować.
  • MessagePack jest zazwyczaj 50-80% rozmiaru odpowiadającego JSON.
  • Typy rozszerzeń (ujemne kody typów) są definiowane przez aplikację.
  • Znaczniki czasu używają typu rozszerzenia -1 z różnymi formatami precyzji.
  • Niektóre implementacje używają typu rozszerzenia 1 dla znaczników czasu.

Zrozumienie Parser MessagePack

MessagePack to binarny format serializacji, który ma być tak kompaktowy, jak to możliwe, zachowując jednocześnie kompatybilność z modelem danych JSON. Stworzony przez Sadayuki Furuhashi, MessagePack koduje dane w samooopisującym się binarnym formacie, w którym informacje o typie i dane są przeplatane, umożliwiając wydajne parsowanie bez zewnętrznego schematu.

Format używa schematu kodowania o zmiennej długości. Małe liczby całkowite (0-127) mieszczą się w jednym bajcie. Krótkie ciągi znaków zawierają swoją długość w samym bajcie typu. Mapy i tablice używają kompaktowych prefiksów długości. Ta konstrukcja zazwyczaj daje payloady o rozmiarze 50-80% odpowiadającego JSON, ze znacząco szybszą serializacją i deserializacją, ponieważ nie ma narzutu parsowania tekstu.

MessagePack obsługuje nil, boolean, integer (ze znakiem i bez znaku do 64-bitowych), float (32 i 64-bitowe), string, binary, array, map i typy rozszerzeń. Typy rozszerzeń pozwalają aplikacjom definiować niestandardowe typy — rozszerzenie timestamp (typ -1) jest jedynym standaryzowanym rozszerzeniem. Biblioteki istnieją dla praktycznie każdego języka programowania z konsekwentną kompatybilnością międzyjęzykową.

MessagePack jest używany w Redis (jako opcjonalny format serializacji), Fluentd (przekazywanie logów), SignalR (web w czasie rzeczywistym) i wielu systemach RPC oraz protokołach sieciowych gier, gdzie przepustowość i szybkość parsowania mają znaczenie. Jest dobrym wyborem, gdy pożądana jest kompatybilność z JSON, ale narzut serializacji tekstowej jest zbyt wysoki.

MessagePack najlepiej sprawdza się w scenariuszach, gdzie przepustowość lub szybkość parsowania są krytyczne: komunikacja w czasie rzeczywistym, API o wysokiej przepustowości, sieci gier, urządzenia IoT i warstwy buforowania. JSON pozostaje lepszym wyborem, gdy czytelność dla człowieka ma znaczenie, dla plików konfiguracyjnych lub przy współpracy z systemami oczekującymi formatów tekstowych.

W porównaniu z Protocol Buffers, MessagePack jest bezschematowy jak JSON — dane są samooopisujące się i mogą być serializowane bez predefiniowanego schematu. Protocol Buffers wymagają pliku schematu .proto kompilowanego do kodu specyficznego dla języka, ale produkują mniejsze payloady i zapewniają silniejszą typowość. MessagePack lepiej pasuje do dynamicznych danych bez schematów, podczas gdy Protobuf wyróżnia się przy dobrze zdefiniowanych kontraktach API, gdzie potrzebna jest maksymalna wydajność.

Typy rozszerzeń pozwalają aplikacjom definiować niestandardowe typy danych wykraczające poza wbudowany zestaw. Każde rozszerzenie ma kod typu (od -128 do 127) i dowolne dane binarne. Rozszerzenie timestamp (typ -1) jest jedynym standaryzowanym rozszerzeniem i reprezentuje znaczniki czasu z precyzją do nanosekund. Aplikacje mogą definiować własne rozszerzenia dla typów takich jak UUID, BigDecimal lub obiekty specyficzne dla domeny.

← Powrot do wszystkich narzedzi