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
320
Эволюция антипаттернов в 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
Slack上でインフラをトラブルシュートする! Agentic Platform Engineeringの第一歩
teru0x1
4
1.7k
例外の正しい扱い方 そのエラー try-catchして大丈夫?
jinwatanabe
3
500
MCPをつなげて作る組織横断のAIエージェント基盤(の開発工程)
tsubakimoto_s
0
130
顧客に向き合う開発組織へ。リアーキテクチャとフィーチャーチーム化で挑む組織改革
safie
0
1.6k
負債のメタファと2026年 / Debt Metaphor in Agentic Engineering Age 202609 Edition
twada
PRO
2
240
アプリログインとWeb認証基盤をつなぐ ASWebAuthenticationSession 作法
shimastripe
1
310
What the customer really needed
kawaguti
PRO
1
160
omasushiというライブラリを作った
polidog
PRO
0
230
技術的負債から考える、AI時代のエンジニアリング投資 — ビズリーチの技術的負債と向き合った経験から、変更し続けられるソフトウェアを考える/ technical-debt-con2026
visional_engineering_and_design
3
2.4k
SREは、MCPとAutopilotをこう使え!
kazumax55
2
770
安心して変更できるWebフロントエンドの作り方
pirosikick
4
2.3k
日経電子版を支えていく Kasane Design System/fec_fukuoka
nikkei_engineer_recruiting
0
1.5k
Featured
See All Featured
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
460
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
420
DBのスキルで生き残る技術 - AI時代におけるテーブル設計の勘所
soudai
PRO
68
57k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
4.3k
Heart Work Chapter 1 - Part 1
lfama
PRO
9
36k
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.1k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
270
From Legacy to Launchpad: Building Startup-Ready Communities
dugsong
0
330
jQuery: Nuts, Bolts and Bling
dougneiner
66
8.6k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.8k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
450
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
Спасибо за внимание! Вопросы?