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
150
Swiftで簡易 HTTP Server を作る
Toshiyana
September 30, 2023
Tweet
Share
More Decks by Toshiyana
See All by Toshiyana
Qiita Hackathon: そこにAIはあるんか
toshiyana36
0
19
新卒iOSエンジニアの歩み
toshiyana36
0
290
Other Decks in Programming
See All in Programming
slow types ってなんだろう?
karad
0
210
TypeScriptから始める VR生活
tamagokakeg
2
120
ServerAction で Progressive Enhancement はどこまで頑張れるか? / progressive-enhancement-with-server-action
takefumiyoshii
6
510
TCAとKMPを用いた新規動画配信アプリ 「ABEMA Live」の設計
tomu28
2
140
戦略的DDDは重いのか? / Is strategic DDD heavy?
pictiny
3
2.1k
『WordPressコミュニティで学ぶ』OSS貢献の多様性
ippey
0
260
Good first issues of TypeProf
mame
4
580
Amazon Aurora Serverless v2が意外と高かった話と、AWS Database Migration Serviceの話
satoshi256kbyte
1
110
Docker_OSS_ホスティング入門
satokoki645
0
140
TypeScriptの型とパフォーマンス (TSKaigi 2024)
ypresto
14
4.6k
TypeScriptでもLLMアプリケーション開発 / LLM Application In Typescript
rkaga
5
1.3k
Prepare for Jakarta EE 11 - Performance and Developer Productivity
ivargrimstad
0
290
Featured
See All Featured
What the flash - Photography Introduction
edds
64
11k
The Cost Of JavaScript in 2023
addyosmani
21
4k
Dealing with People You Can't Stand - Big Design 2015
cassininazir
358
22k
What's new in Ruby 2.0
geeforr
338
31k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
34
6.1k
Writing Fast Ruby
sferik
622
60k
BBQ
matthewcrist
80
8.8k
For a Future-Friendly Web
brad_frost
172
9k
Fireside Chat
paigeccino
22
2.7k
Thoughts on Productivity
jonyablonski
60
3.9k
Designing on Purpose - Digital PM Summit 2013
jponch
111
6.5k
Raft: Consensus for Rubyists
vanstee
133
6.3k
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のコードを覗いて みて