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

Izhevsk PHP Meetup #3. Protocol Buffers или не ...

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

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

Avatar for Izhevsk PHP Meetup

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