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
70
Swift6からのTyped throws
toshiyana36
2
320
Catch Up Swift Concurrency Actor & Sendable
toshiyana36
0
200
Qiita Hackathon: そこにAIはあるんか
toshiyana36
0
84
新卒iOSエンジニアの歩み
toshiyana36
1
520
Other Decks in Programming
See All in Programming
新しいPHP拡張モジュールインストール方法「PHP Installer for Extensions (PIE)」を使ってみよう!
cocoeyes02
0
420
KawaiiLT 登壇資料 キャリアとモチベーション
hiiragi
0
150
小田原でみんなで一句詠みたいな #phpcon_odawara
stefafafan
0
350
VitestのIn-Source Testingが便利
taro28
8
2.2k
これだけは知っておきたいクラス設計の基礎知識 version 2
masuda220
PRO
24
6.6k
Make Parsers Compatible Using Automata Learning
makenowjust
2
5.7k
「”誤った使い方をすることが困難”な設計」で良いコードの基礎を固めよう / phpcon-odawara-2025
taniguhey
0
170
エンジニア向けCursor勉強会 @ SmartHR
yukisnow1823
2
6.8k
Fiber Scheduler vs. General-Purpose Parallel Client
hayaokimura
1
120
複雑なフォームの jotai 設計 / Designing jotai(state) for Complex Forms #layerx_frontend
izumin5210
4
1.2k
PHP で学ぶ OAuth 入門
azuki
1
210
Instrumentsを使用した アプリのパフォーマンス向上方法
hinakko
0
110
Featured
See All Featured
Fireside Chat
paigeccino
37
3.4k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
119
51k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
30
2.3k
Building a Modern Day E-commerce SEO Strategy
aleyda
40
7.2k
The Power of CSS Pseudo Elements
geoffreycrofte
75
5.8k
Unsuck your backbone
ammeep
670
57k
The World Runs on Bad Software
bkeepers
PRO
68
11k
How to Think Like a Performance Engineer
csswizardry
23
1.5k
Agile that works and the tools we love
rasmusluckow
328
21k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
129
19k
4 Signs Your Business is Dying
shpigford
183
22k
How to Ace a Technical Interview
jacobian
276
23k
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のコードを覗いて みて