google protocol buffers in mobile projects
Post on 30-Jun-2015
197 Views
Preview:
TRANSCRIPT
Google Protocol Buffers в
мобильных проектах
Домбровский Константин, Ciklum-Одесса проект
Apsmart
Проблемы в клиент-серверных приложениях для мобильных платформ
• Использование XML или JSON приводит к
необходимости переписывать парсеры
для различных платформ
• Необходимость переписывать
логические структуры данных
• Скорость парсинга часто оставляет
желать лучшего
• Все это уныло чуть менее чем полностью
Что такое Google Protocol Buffers?
Google Protocol Buffers (GPB) –
инструмент для быстрой сериализации и
десериализации простых объектов –
сообщений, разработанный компанией
Google (Всегда ваш К.О.)
Код GPB был открыт по лицензии BSD в
2008 году.
Причины создания Google Protocol Buffers:
• GPB проще
• GPB быстрей
• Весит меньше
• Удобно использовать
Язык описания структур данных
• Сообщения
• Вложенные сообщения
• Скалярные типы (int, string, bool, и.т.д.)
• Enum-ы
• Бинарные данные (bytes)
Типы данных:
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!!!
Как использовать GPB в проекте?
Очень просто!!!
Создание нового объекта
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, быстрее чем JSON)
Меньший объём (от 3 до 10 раз меньше чем XML, до 2х раз меньше чем JSON)
XML GPB02468
1012
База в 1 триллион твитов
Size (Petabyte)
Недостатки GPB Отсутствие наследования Отсутствие возможности изменять
объекты
Спасибо за внимание!Вопросы?
https://github.com/THRESHE
kdombrovsky@gmail.com
top related