Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Izhevsk PHP Meetup #3. Protocol Buffers или не JSON'ом единым

Izhevsk PHP Meetup #3. Protocol Buffers или не JSON'ом единым

Антон Жвакин, C++ разработчик, Galament Software
Расскажу о том, что это такое и зачем вам это нужно. Особенности 2-й и 3-й версии. Сравнение с некоторыми аналогами. Доклад ориентирован на широкую аудиторию и призван расширить взгляды разработчиков на задачу сериализации структурированных данных.

Izhevsk PHP Meetup

September 28, 2017
Tweet

More Decks by Izhevsk PHP Meetup

Other Decks in Technology

Transcript

  1. О чем речь? • Имеем структурированные данные • Хотим осуществить

    их ввод/вывод (например, через файловую систему или по сети) 4
  2. Что такое Protocol Buffers? • Язык описания структур данных •

    Протокол сериализации • Генератор кода 11
  3. Пример message User { string name = 1; uint32 age

    = 2; repeated string account = 3; } 12
  4. Пример message User { string name = 1; uint32 age

    = 2; repeated string account = 3; } >protoc.exe user.proto --php_out=. 13
  5. Пример include 'User.php’; $user = new User(); $user->setName('Anton'); $data =

    $user->serializeToString(); $user2->mergeFromString($data); 16
  6. Это компактно 23 • Бинарное представление • Номер поля вместо

    его имени • Незаполненные поля не представлены
  7. Это компактно 24 • Бинарное представление • Номер поля вместо

    его имени • Незаполненные поля не представлены • Особое представление целых чисел
  8. Это компактно 25 • Бинарное представление • Номер поля вместо

    его имени • Незаполненные поля не представлены • Особое представление целых чисел ◦ int64 ◦ sint64 ◦ uint64 ◦ fixed64 ◦ sfixed64
  9. Плавающий размер представления • 7 бит полезной нагрузки • 1

    бит признак наличия еще байта 127 - 1 байт 01111111 128 - 2 байта 10000000 00000001 26
  10. Часто используемые поля Ключ поля - целое число(его номер +

    тип) [0][1111][111] • Поля с 1 по 15 занимают 1 байт • С 16 по 2047 - 2 байта 30
  11. Диспетчеризация сообщений message Request { enum Type { ADD_USER =

    1; DELETE_USER = 2; } Type type = 1; AddUser add_user = 2; DeleteUser delete_user = 3; } 32
  12. Используйте Protobuf 3 • Больше ЯП • Все поля необязательные

    • Упаковка repeated полей • Конвертация из/в JSON 37