google protocol buffers в мобильных проектах
TRANSCRIPT
Проблемы в клиент-серверных приложениях для мобильных платформ
• Использование XML или JSON
• Необходимость переписывать парсеры для различных платформ
• Необходимость переписывать логические структуры данных
• Скорость парсинга часто оставляет желать лучшего
• Все это уныло чуть менее чем полностью
Что такое Google Protocol Buffers?
Google Protocol Buffers (GPB) – инструмент
для быстрой сериализации и десериализации
простых объектов – сообщений, разработанный
компанией Google.
Код GPB был открыт по лицензии BSD в
2008 году.
Причины создания Google Protocol Buffers:
• GPB проще
• GPB быстрей
• Весит меньше
• Удобно использовать
Язык описания структур данных
• Сообщения
• Вложенные сообщения
• Скалярные типы (int, string, bool, и.т.д.)
• Enum-ы
Типы данных:
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;
}
Подготовка к использованию 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!!!
Создание нового объекта
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];
Сериализация и десериализация
Product* product = [builder build];NSData* serializedData = [product data];product = [Product parseFromData: serializedData];
Product_Builder* builder = [Product builderWithPrototype: product];[builder setId: 9000];product = [builder build];
Изменение объекта
Плюсы GPB • Простота использования • Скорость работы (от 20 до 100 раз
быстрее чем XML)
• Меньший объём (от 3 до 10 раз меньше)
0
5
10
15
XML GPB
База в 1 триллион твитов
Size (Petabyte)