Google Protocol Buffers in mobile projects
-
Upload
kostia-dombrovsky -
Category
Technology
-
view
195 -
download
3
Transcript of Google Protocol Buffers in mobile projects
![Page 1: Google Protocol Buffers in mobile projects](https://reader036.fdocuments.in/reader036/viewer/2022062419/55924e021a28abb3658b462e/html5/thumbnails/1.jpg)
Google Protocol Buffers в
мобильных проектах
Домбровский Константин, Ciklum-Одесса проект
Apsmart
![Page 2: Google Protocol Buffers in mobile projects](https://reader036.fdocuments.in/reader036/viewer/2022062419/55924e021a28abb3658b462e/html5/thumbnails/2.jpg)
Проблемы в клиент-серверных приложениях для мобильных платформ
• Использование XML или JSON приводит к
необходимости переписывать парсеры
для различных платформ
• Необходимость переписывать
логические структуры данных
• Скорость парсинга часто оставляет
желать лучшего
• Все это уныло чуть менее чем полностью
![Page 3: Google Protocol Buffers in mobile projects](https://reader036.fdocuments.in/reader036/viewer/2022062419/55924e021a28abb3658b462e/html5/thumbnails/3.jpg)
Что такое Google Protocol Buffers?
Google Protocol Buffers (GPB) –
инструмент для быстрой сериализации и
десериализации простых объектов –
сообщений, разработанный компанией
Google (Всегда ваш К.О.)
Код GPB был открыт по лицензии BSD в
2008 году.
![Page 4: Google Protocol Buffers in mobile projects](https://reader036.fdocuments.in/reader036/viewer/2022062419/55924e021a28abb3658b462e/html5/thumbnails/4.jpg)
Причины создания Google Protocol Buffers:
• GPB проще
• GPB быстрей
• Весит меньше
• Удобно использовать
![Page 5: Google Protocol Buffers in mobile projects](https://reader036.fdocuments.in/reader036/viewer/2022062419/55924e021a28abb3658b462e/html5/thumbnails/5.jpg)
Язык описания структур данных
• Сообщения
• Вложенные сообщения
• Скалярные типы (int, string, bool, и.т.д.)
• Enum-ы
• Бинарные данные (bytes)
Типы данных:
![Page 6: Google Protocol Buffers in mobile projects](https://reader036.fdocuments.in/reader036/viewer/2022062419/55924e021a28abb3658b462e/html5/thumbnails/6.jpg)
message Product{
required string name = 1;required int32 id = 2;optional int32 price = 3;optional bool starred = 4;
enum OrderStatus {Ordered = 0; Shipped = 1; Idle
= 2;}optional OrderStatus status = 5;
message ProductReview{
required int32 id = 1;optional string reviewer = 2;optional string review = 3;required in32 rating = 4;
}repeated ProductReview reviews = 6;
}
![Page 7: Google Protocol Buffers in mobile projects](https://reader036.fdocuments.in/reader036/viewer/2022062419/55924e021a28abb3658b462e/html5/thumbnails/7.jpg)
Подготовка к использованию GPB в проекте
• Скачиваем исходники GPB для нужного языка
• Компилируем исходники (Придется покрасноглазить 5-10 мин.)
• С помощью компилятора protoc компилируем файл с объявлениями сообщений protoc --proto_path=src --objc_out=build/gen src/shop.proto
• Подключаем получившиеся файлы Shop.pb.h и Shop.pb.m и ProtocolBuffers.h к проекту
• Подключаем проект ProtocolBuffers.xcodeproj к нашему проекту как прямую зависимость
• ???
• PROFIT!!!
![Page 8: Google Protocol Buffers in mobile projects](https://reader036.fdocuments.in/reader036/viewer/2022062419/55924e021a28abb3658b462e/html5/thumbnails/8.jpg)
Как использовать GPB в проекте?
Очень просто!!!
![Page 9: Google Protocol Buffers in mobile projects](https://reader036.fdocuments.in/reader036/viewer/2022062419/55924e021a28abb3658b462e/html5/thumbnails/9.jpg)
Создание нового объекта
Product_Builder* builder = [Product builder];[builder setId: 0];[builder setName: @"BMW M5"];[builder setStatus: Product_OrderStatusShipped];
Product_ProductReview_Builder* reviewBuilder = [Product_ProductReview builder];
[reviewBuilder setId: 0];[reviewBuilder setReviewer: @"Kostia Dombrovsky"];[reviewBuilder setRating: 5];[reviewBuilder setReview: @"Every BMW rocks!"];[builder addReviews: [reviewBuilder build]];Product* product = [builder build];
![Page 10: Google Protocol Buffers in mobile projects](https://reader036.fdocuments.in/reader036/viewer/2022062419/55924e021a28abb3658b462e/html5/thumbnails/10.jpg)
Сериализация и десериализация
Product* product = [builder build];NSData* serializedData = [product data];product = [Product parseFromData: serializedData];
Product_Builder* builder = [Product builderWithPrototype: product];
[builder setId: 9000];product = [builder build];
Изменение объекта
![Page 11: Google Protocol Buffers in mobile projects](https://reader036.fdocuments.in/reader036/viewer/2022062419/55924e021a28abb3658b462e/html5/thumbnails/11.jpg)
Достоинства GPB Простота использования Скорость работы (от 20 до 100 раз
быстрее чем XML, быстрее чем JSON)
Меньший объём (от 3 до 10 раз меньше чем XML, до 2х раз меньше чем JSON)
XML GPB02468
1012
База в 1 триллион твитов
Size (Petabyte)
![Page 12: Google Protocol Buffers in mobile projects](https://reader036.fdocuments.in/reader036/viewer/2022062419/55924e021a28abb3658b462e/html5/thumbnails/12.jpg)
Недостатки GPB Отсутствие наследования Отсутствие возможности изменять
объекты
![Page 13: Google Protocol Buffers in mobile projects](https://reader036.fdocuments.in/reader036/viewer/2022062419/55924e021a28abb3658b462e/html5/thumbnails/13.jpg)
Спасибо за внимание!Вопросы?
https://github.com/THRESHE