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
76
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
Software Supply Chain Attackからクラウド環境を守るためにできること
lhazy
2
140
GitHub CopilotのFinOps- AI CreditのObservabilityと価値を生むためのエージェント設計
yuriemori
0
120
Issue設計から始める仕様駆動開発 / 20260731 Mizuki Hirata
shift_evolve
PRO
1
130
LangfuseによるLLMOps基盤の構築と活用事例
zozotech
PRO
1
290
モノリス Rails でも日中に rails db:migrate を走らせたい! / Daytime rails db:migrate on Monolithic Rails!
euglena1215
3
480
『三匹の子ぶた』から学ぶネットワークセキュリティの昔と今 / Network Security: Then and Now Through the Lens of The Three Little Pigs
nttcom
1
1.7k
AI時代の強いチームの作り方
yuukiyo
24
15k
AIは実装を速くする。では、私たちは何を今作るべきか?-立場を越えてリリースに向き合ったチーム開発の実践 / 20260801 Hiromi Nakaya and Naoki Takahashi
shift_evolve
PRO
3
390
JavaScript 研修 (2026)
recruitengineers
PRO
0
310
OSPN.JPバージョンアップ作業進捗のご報告 / 20260801-osc26kyoto
akkiesoft
0
270
【CEDEC2026】『GRANBLUE FANTASY: Relink - Endless Ragnarok』のバトル制作事例 ~最高のキャラゲーを目指して~
cygames
PRO
0
200
修正PRを食べてレビュースキルが賢くなる:Claude Codeによる自己改善サイクル
yuyaumetsu
4
1.2k
Featured
See All Featured
Building Flexible Design Systems
yeseniaperezcruz
330
40k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.2k
Writing Fast Ruby
sferik
630
63k
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
330
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
360
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
Code Reviewing Like a Champion
maltzj
528
40k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
[SF Ruby Conf 2025] Rails X
palkan
2
1.2k
How to Think Like a Performance Engineer
csswizardry
28
2.7k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
240
How to Ace a Technical Interview
jacobian
281
24k
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
Спасибо за внимание! Вопросы?