Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Александр Кравченков: gRPC
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
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
100
Sign In with Apple (client + server). Петр Третьяков
cocoaheads
0
310
Эволюция антипаттернов в Java и Kotlin. Михаил Горюнов
cocoaheads
0
190
Рефакторинг в условиях быстрорастущего стартапа. Егор Фесенко
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
170
Other Decks in Technology
See All in Technology
Master Dataグループ紹介資料
sansan33
PRO
1
4.8k
AWSとGitHub Actionsの責任境界と 組織で安全に使用する取り組み
nealle
0
170
「ミスを許さない手順書」を作ってみた 〜 個人的にはこれ以上できることはあまりなさそう/20260827-ssmjp-operation-procedure-update
opelab
6
3.6k
マイナンバーカード本人確認の実装比較(OAuth/OIDC Numa (Immersion) Workshop 2026) / 20260825 numa-12
oidfj
PRO
0
300
NANDでも描画したい!
nichica906
3
750
カーネルまで探検して理解するふたつの自動計装
sumiyae
0
320
Dylib Hijacking on macOS: Dead or Alive?
patrickwardle
0
110
Introduction to Sansan for Engineers / エンジニア向け会社紹介
sansan33
PRO
6
77k
医療の現場を変革に挑戦した半年間の軌跡 - PythonとAIで現場を変える / From Code to Care
soudai
PRO
1
630
作って理解するCoding Agent 〜フレームワークに頼らないピュア Python での実装〜
takapy
4
1.3k
Introduction to Sansan, inc / Sansan Global Development Center, Inc.
sansan33
PRO
0
3.2k
AI・HPC開発を支えるGPU環境の新しい選択肢 液冷GPUシステム「AquSys」の取り組み
gpuunite_official
0
250
Featured
See All Featured
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
1
380
Gemini Prompt Engineering: Practical Techniques for Tangible AI Outcomes
mfonobong
2
500
A Soul's Torment
seathinner
6
3.5k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
2
400
Are puppies a ranking factor?
jonoalderson
2
3.8k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
32
3k
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.1k
Designing for Performance
lara
611
70k
[SF Ruby Conf 2025] Rails X
palkan
2
1.3k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
180
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
JavaScript: Past, Present, and Future - NDC Porto 2020
reverentgeek
52
6.1k
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
Спасибо за внимание! Вопросы?