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
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
300
Эволюция антипаттернов в Java и Kotlin. Михаил Горюнов
cocoaheads
0
190
Рефакторинг в условиях быстрорастущего стартапа. Егор Фесенко
cocoaheads
0
75
Make Experiments Great Again, или Как iOS Браузер А/Б тестирование улучшал
cocoaheads
0
140
Лотерея в приложении: отрисовка, анимация и никакого мошенничества
cocoaheads
0
110
Микроинтеракции в iOS
cocoaheads
0
260
SceneKit на практике
cocoaheads
0
150
Пишем под iOS на Flutter
cocoaheads
0
170
Other Decks in Technology
See All in Technology
AIに「使われる」時代のSaaS戦略 〜既存WebAPIのMCPサーバー化における開発ノウハウ〜
ekispert_api
0
300
環境凍結という Toil を倒す -セルフサービス型 Ephemeral テスト環境の 設計と実践
shirouz
1
1.9k
SREとQA 二人三脚で進めるSLO運用/sre-qa-slo
sugitak
0
110
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
15
110k
デジタル・デザイン構想 by Sayaka Ishizuka
y150saya
0
200
『AIに負けない』より『AIと遊ぶ』」〜ワクワクが最強のテスト・QA学習戦略_公開用
odan611
2
550
最近評価が難しくなった
maroon8021
0
260
アカウントが増えてからでは遅い? ~ マルチアカウント統制の勘所 ~
kenichinakamura
0
210
DMM.com 購入改善推進チーム におけるCodeRabbitを用いた レビューフロー改善の一例
ysknsid25
2
570
AI Agent SaaS を支える自社仮想化基盤への挑戦と実運用 / ai-agent-saas-virtualization
flatt_security
2
3.4k
NDIAS CTF 2026 問題解説会資料
bata_24
0
180
Compose 新機能総まとめ / What's New in Jetpack Compose
yanzm
0
160
Featured
See All Featured
VelocityConf: Rendering Performance Case Studies
addyosmani
333
25k
SEO for Brand Visibility & Recognition
aleyda
0
4.6k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
230
Making Projects Easy
brettharned
120
6.7k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.5k
[RailsConf 2023] Rails as a piece of cake
palkan
59
6.7k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
201
75k
Getting science done with accelerated Python computing platforms
jacobtomlinson
2
260
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
460
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
180
Mind Mapping
helmedeiros
PRO
1
280
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
Спасибо за внимание! Вопросы?