Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Александр Кравченков: gRPC
Search
CocoaHeads
May 07, 2018
Technology
320
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Александр Кравченков: gRPC
CocoaHeads
May 07, 2018
More Decks by CocoaHeads
See All by CocoaHeads
Тесты: Повторение. Виктор Суриков
cocoaheads
0
110
Sign In with Apple (client + server). Петр Третьяков
cocoaheads
0
340
Эволюция антипаттернов в Java и Kotlin. Михаил Горюнов
cocoaheads
0
200
Рефакторинг в условиях быстрорастущего стартапа. Егор Фесенко
cocoaheads
0
80
Make Experiments Great Again, или Как iOS Браузер А/Б тестирование улучшал
cocoaheads
0
140
Лотерея в приложении: отрисовка, анимация и никакого мошенничества
cocoaheads
0
120
Микроинтеракции в iOS
cocoaheads
0
260
SceneKit на практике
cocoaheads
0
150
Пишем под iOS на Flutter
cocoaheads
0
180
Other Decks in Technology
See All in Technology
Software Engineering in an AI-Driven World
erikjhordan_rey
0
130
AX時代の自治体支援リソース再配分と役割分担の再構成:戦略とロードマップ(概要)
sishi2026
0
200
Kiro IDE 入門 (画面の各部から、頼み方、任せ方、戻し方まで) | 目指せ Kiro マスター 02
inariku
PRO
4
150
DBTS2026 盛り上がってますか!?Databricksが実現するAI時代のデータ基盤
akuwano
1
200
属人化したISMS運用をGitHubとAIで仕組み化した1年間の記録
sioncojp
2
1.3k
公共分野での生成AI活用
toru_kubota
1
300
AWS基盤改善を支える 私たちの理念と行動指針
kentosuzuki
0
130
サボる子はいねぇがー!AgentCoreハーネスの脆弱性に学ぶ、エージェントの入力バリデーション
iwamot
PRO
5
310
Kiro Crew の Bot (続く役目を任せる窓口) | 目指せ Kiro マスター 12
inariku
PRO
2
320
AI Agent 時代のデータ基盤: ClickHouse で実現する 超高速分析とコスト削減の両立
jozono
0
220
自律的なチームを作るためにTechPMがやらないこと
ny7760
1
530
ゼロから作るWebアプリの新定番!?Amplify Gen 2 × AWS Blocksで実現する「開発速度とRDBの柔軟性のいいとこ取り」
amixedcolor
1
180
Featured
See All Featured
BBQ
matthewcrist
90
10k
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.8k
Rails Girls Zürich Keynote
gr2m
96
14k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
70
68k
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
1.1k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
480
We Have a Design System, Now What?
morganepeng
55
8.4k
Neural Spatial Audio Processing for Sound Field Analysis and Control
skoyamalab
0
610
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
1
510
Information Architects: The Missing Link in Design Systems
soysaucechin
1
1.3k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.2k
KATA
mclloyd
PRO
35
16k
Transcript
None
Требования к продукту • Высокая безопасность • Высокая скорость транспорта
• Высокая скорость парсинга • Поддержка долгого соединения с сервером 2
HTTP/1.x Request Response { “Field”:false, “Filed”: [...], ... } {
“Field”:111, “Filed”: {...}, ... } 3
Data + Int32 + Int32 + Int32 + Int32 +
Int32 + Double + Double + Double + String + String Container + [Data] 4 Модель для тестирования в UML
5
6
7
Protobuf JSON 0a1110011802320934313233333930363140010a2410 01180229c9c7e07c0c58a140320a3230313938313535 36364001490000000000c05e400a2c088f01100121000 0000000c05e40290000000000c05e40320a313734373 03231383034480000000000006940 7b226f72646572734172726179223a5b7b226f726967436c69656e7449 64223a22222c226f72646572537461747573223a322c22717479223a3 02c22636c69656e744964223a22343133333339303631222c226f7264
65724964223a302c2273696465223a312c226372656174696f6e44617 465223a302c226c6561766573517479223a302c227365637572697479 4964223a312c247072696365223a302c226d6f64696669636174696f6e 44617465223a307d2c7b226f726967436c69656e744964223a22222c2 26f72646533537461747573223a322c22717479223a323232302e3032 34333930323433392c22636c69656e744964223a22323036393831352 53636222c226f726465724964223a302c2273696465223a312c226372 656174696f6e44617465223a302c226c6561766573517479223a302c2 273656375726974794964223a312c227072696365223a3132332c226d 6f64696669636174696f6e44617465223a307d2c7b226f726967436c69 656e744964223a22222c226f72646572537461747573223a302c22717 479223a3132332c22636c69656e744964223a22313734373032313830 34222c226f726465724964223a3134332c2273696465223a302c22637 2656174696f6e44617465223a302c226c6561766573517479223a3132 332c2273656375726974794964223a312c227072696365223a3230302 c226d6f64696669636174696f6e44617465223a307d5d7a 8
Что такое gRPC Фреймворк для клиент-серверного взаимодействия, построенного на Remote
Procedure Call. 9
Фичи • HTTP/2 - новая версия протокола HTTP • Protobuf
- протокол сериализации • Stream API - удобный интерфейс 10
..01011101010101.. HTTP/2 Request Response ..11011110101010111.. 11
12 ..0101110110101.. HTTP/2 Request Response ..1101101010111.. Плюсы: • Бинарный протокол
13 ..01011101010101.. HTTP/2 Request Response ..11011110101010111.. Плюсы: • Бинарный протокол
• Мультиплексирование TCP потоков
14 ..01011101010101.. HTTP/2 Request Response ..11011110101010111.. Плюсы: • Бинарный протокол
• Мультиплексирование TCP потоков • Более безопасный
15 Protobuf • Формат сериализации бинарный • Оптимизация веса сообщений
• Быстрый парсинг • Отдельный синтаксис для описания спецификации • Кодогенерация
service SampleInterface { rpc GetContainer (EmptyMessage) returns (Container) {} rpc
Stream (stream Container) returns (stream Container) {} } 16 proto3
17 service SampleInterface { rpc GetContainer (EmptyMessage) returns (Container) {}
rpc Stream (stream Container) returns (stream Container) {} } proto3
18 service SampleInterface { rpc GetContainer (EmptyMessage) returns (Container) {}
rpc Stream (stream Container) returns (stream Container) {} } proto3
19 service SampleInterface { rpc GetContainer (EmptyMessage) returns (Container) {}
rpc Stream (stream Container) returns (stream Container) {} } proto3
20 service SampleInterface { rpc GetContainer (EmptyMessage) returns (Container) {}
rpc Stream (stream Container) returns (stream Container) {} } proto3
21 service SampleInterface { rpc GetContainer (EmptyMessage) returns (Container) {}
rpc Stream (stream Container) returns (stream Container) {} } proto3
22 service SampleInterface { rpc GetContainer (EmptyMessage) returns (Container) {}
rpc Stream (stream Container) returns (stream Container) {} } proto3
message OrderData { int32 Id = 1; string OtherId =
2; bool Status = 3; double Side = 4; int64 Date = 5; } message Container { repeated OrderData Data = 1; } 23 proto3
24 message OrderData { int32 Id = 1; string OtherId
= 2; bool Status = 3; double Side = 4; int64 Date = 5; } message Container { repeated OrderData Data = 1; } proto3
25 message OrderData { int32 Id = 1; string OtherId
= 2; bool Status = 3; double Side = 4; int64 Date = 5; } message Container { repeated OrderData Data = 1; } proto3
Проблемы.Неважные 1. Нет нормальной реализации для Swift 2. Ошибку можно
передать только в message 3. Нельзя вызывать метод без параметров или вернуть ничего 4. Нет null-значений у полей 26
27 Проблемы.Важные 1. Objective-C работает с non-arc сущностями 2. Много
повторяющегося кода
IDL: Services [...] Models [...] Protobuf Compiler Models Services proto
28
Protobuf Compiler Entries Services Entities Swift Entities Generator podspec proto
29
Application gRPC Service Objective-C Entity 30
func firstMethod(entity: FirstRequestEntity) -> AnyContext<FirstReplyEntity> { let request = GrpcInterface.default.grpcFirstMethod
return GrpcServiceContext(request: request, model: entity).start() } func secondMethod(entity: RequestEntity) -> AnyContext<SecondReplyEntity> { let request = GrpcInterface.default.grpcSecondMethod return GrpcServiceContext(request: request, model: entity).start() } 31
1. Быстрая передача данных 2. Быстрый парсинг 3. Кодогенерация 4.
Разделяемая клиентом и сервером спецификация 5. Удобный интерфейс взаимодействия Польза 32
Как использовать 1. Идем на официальный сайт и читаем документацию
2. Через brew ставим Protobuf compiler и плагин для obj-c 3. Через cocoapods тянем нужные зависимости 4. Пишем свой podspec (пример) или генерим через консоль. 5. На все мы потратили около часа. 33
gRPC • Быстрый • Удобный • Не REST’овый • Активно
развивающийся 34
Официальный сайт gRPC Официальный репозиторий Реализация для Objective-C (официальная) Реализация
для Swift (неофициальная) Другие полезные ссылки Ссылки 35
Спасибо за внимание! Вопросы?