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
Swiftで簡易 HTTP Server を作る
Search
Toshiyana
September 30, 2023
Programming
0
390
Swiftで簡易 HTTP Server を作る
Toshiyana
September 30, 2023
Tweet
Share
More Decks by Toshiyana
See All by Toshiyana
Mobile 自動E2Eテストの導入検討-Appium
toshiyana36
0
74
Swift6からのTyped throws
toshiyana36
2
320
Catch Up Swift Concurrency Actor & Sendable
toshiyana36
0
210
Qiita Hackathon: そこにAIはあるんか
toshiyana36
0
85
新卒iOSエンジニアの歩み
toshiyana36
1
550
Other Decks in Programming
See All in Programming
Golangci-lint v2爆誕: 君たちはどうすべきか
logica0419
1
280
「理解」を重視したAI活用開発
fast_doctor
0
320
Duke on CRaC with Jakarta EE
ivargrimstad
1
230
M5UnitUnified 最新動向 2025/05
gob
0
140
Instrumentsを使用した アプリのパフォーマンス向上方法
hinakko
0
250
Serving TUIs over SSH with Go
caarlos0
0
770
複雑なフォームの jotai 設計 / Designing jotai(state) for Complex Forms #layerx_frontend
izumin5210
6
1.6k
Носок на сок
bo0om
0
1.4k
ビカム・ア・コパイロット
ymd65536
1
160
20250429 - CNTUG Meetup #67 / DevOps Taiwan Meetup #69 - Deep Dive into Tetragon: Building Runtime Security and Observability with eBPF
tico88612
0
190
ウォンテッドリーの「ココロオドル」モバイル開発 / Wantedly's "kokoro odoru" mobile development
kubode
2
660
Storybookの情報をMCPサーバー化する
shota_tech
3
1.4k
Featured
See All Featured
Code Reviewing Like a Champion
maltzj
523
40k
KATA
mclloyd
29
14k
A Modern Web Designer's Workflow
chriscoyier
693
190k
Site-Speed That Sticks
csswizardry
6
560
Intergalactic Javascript Robots from Outer Space
tanoku
271
27k
Navigating Team Friction
lara
185
15k
Unsuck your backbone
ammeep
671
58k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
13
850
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.8k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
16k
Balancing Empowerment & Direction
lara
0
40
Fashionably flexible responsive web design (full day workshop)
malarkey
407
66k
Transcript
Swiftで簡易 HTTP Server を作る 2023/09/30 Sandbox ✖ DMM LT
自己紹介 柳元 俊輝 (Yanagimoto Toshiki) / Toshiyana 新卒1年目 iOSエンジニア ◆
所属:プラットフォーム事業本部 DMM PointClub アプリチーム ◆ 趣味: テニス🎾、英語の勉強、一風堂 ◆ 最近:今年初めてiOSDCにスタッフとして参加しました ◆ Twitter: Toshiyana 2 地元
アジェンダ ◆ SwiftでHttp Serverを作る背景 ◆ HTTP通信の大まか流れ ◆ Swiftにおける実装 ◆ デモ
◆ まとめ 3
なんでSwiftでHttp Server ? 4
Swiftで簡易HTTP Serverを作る背景 ◆ 業務ではクライアント側を書いているが、ネットワーク側を手を動かしな がらもっと学びたい ◆ iOSエンジニアなので、一番触る言語がSwift -> Swift で
簡易HTTP Server を作って学ぶぞ! 5
実装するにあたって参考 (ほぼ写経) したライブラリ ◆ Swifter ▪ https://github.com/httpswift/swifter ▪ Swiftで書かれたHttp Serverを起動できるライブラリ(更新がちょっと
止まっていますが。。) ▪ Xcode, Dockerから起動できる ライブラリの中身を見るのは勉強になるので良き 6
Http通信の流れと実装 7
HTTP通信の大まかな流れ ◆ HTTP通信のフロー 1. リクエストの送信(ブラウザ側) 2. リクエストの解析(サーバー側) 3. レスポンスの生成(サーバー側) 4.
レスポンスの送信(サーバー側) 5. レスポンスの表示(ブラウザ側) 8
HTTP通信の大まかな流れ ◆ HTTP通信のフロー 1. リクエストの送信(ブラウザ側) 2. リクエストの解析(サーバー側) 3. レスポンスの生成(サーバー側) 4.
レスポンスの送信(サーバー側) 5. レスポンスの表示(ブラウザ側) 9
リクエストの解析 ◆ HTTPリクエストの構成 ▪ リクエストライン、ヘッダ、ボディ(以下例) 10 リクエストライン ヘッダー ボディ(POSTなどで使用) 空行
リクエストの解析 ◆ Swiftで実装 ▪ リクエストライン、ヘッダ、ボディをソケットから読み込む 11
HTTP Serverの大まかな流れ ◆ HTTP通信のフロー 1. リクエストの送信(ブラウザ側) 2. リクエストの解析(サーバー側) 3. レスポンスの生成(サーバー側)
4. レスポンスの送信(サーバー側) 5. レスポンスの表示(ブラウザ側) 12
レスポンスの生成 ◆ Pathに対するレスポンスを設定する ▪ HTMLを返す場合の例 13
HTTP Serverの大まかな流れ ◆ HTTP通信のフロー 1. リクエストの送信(ブラウザ側) 2. リクエストの解析(サーバー側) 3. レスポンスの生成(サーバー側)
4. レスポンスの送信(サーバー側) 5. レスポンスの表示(ブラウザ側) 14
レスポンスの送信 ◆ HTTPレスポンスの構成 ▪ ステータスライン、ヘッダー、ボディ(以下例) 15 ステータスライン ヘッダー ボディ
レスポンスの送信 ◆ Swiftで実装 ▪ ステータスライン、ヘッダー、ボディをソケットに書き込む 16
デモ 17
補足:ルーティング(コードは長いので省略) ◆ ルーティング:指定されたHTTPメソッドとパスに基づき、リクエストに対す るハンドラーを割り当て、実行すること ◆ Swifterだと以下のように登録、探索を行なっている ▪ 登録 • HTTPメソッドとURLパスを指定して、各リクエストに対するハンドラーを登録
• URLの各パスはスラッシュ( /)で区切られ、ツリー構造(木構造)の各ノードを形成 ▪ 探索 • 指定されたHTTPメソッドとURLパスに対応するハンドラーを探索 • ルートノードから始めて、パスの各セグメントに対応するノードを順に辿る 18
まとめ ◆ SwiftでHTTP Serverを起動できて感動 ◆ Http Serverの仕組みをコードからちょっと理解できた ◆ SwiftのPointer, Cの標準関数のブリッジに触れられた
(今後使うかは不明 ですが) 19 ソースコードをかなり抜粋して説明したので詳細はGithubのコードを覗いて みて