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
320
Swiftで簡易 HTTP Server を作る
Toshiyana
September 30, 2023
Tweet
Share
More Decks by Toshiyana
See All by Toshiyana
Mobile 自動E2Eテストの導入検討-Appium
toshiyana36
0
55
Swift6からのTyped throws
toshiyana36
2
290
Catch Up Swift Concurrency Actor & Sendable
toshiyana36
0
120
Qiita Hackathon: そこにAIはあるんか
toshiyana36
0
79
新卒iOSエンジニアの歩み
toshiyana36
1
460
Other Decks in Programming
See All in Programming
コンテナをたくさん詰め込んだシステムとランタイムの変化
makihiro
1
180
オニオンアーキテクチャを使って、 Unityと.NETでコードを共有する
soi013
0
350
Compose UIテストを使った統合テスト
hiroaki404
0
120
LLM Supervised Fine-tuningの理論と実践
datanalyticslabo
8
1.8k
ChatGPT とつくる PHP で OS 実装
memory1994
PRO
3
160
htmxって知っていますか?次世代のHTML
hiro_ghap1
0
390
MCP with Cloudflare Workers
yusukebe
2
270
fs2-io を試してたらバグを見つけて直した話
chencmd
0
280
AppRouterを用いた大規模サービス開発におけるディレクトリ構成の変遷と問題点
eiganken
1
410
ある日突然あなたが管理しているサーバーにDDoSが来たらどうなるでしょう?知ってるようで何も知らなかったDDoS攻撃と対策 #phpcon.2024
akase244
2
7.7k
サーバーゆる勉強会 DBMS の仕組み編
kj455
1
200
なまけものオバケたち -PHP 8.4 に入った新機能の紹介-
tanakahisateru
1
140
Featured
See All Featured
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
10
850
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
280
13k
The Power of CSS Pseudo Elements
geoffreycrofte
74
5.4k
A designer walks into a library…
pauljervisheath
205
24k
The Language of Interfaces
destraynor
155
24k
Code Review Best Practice
trishagee
65
17k
4 Signs Your Business is Dying
shpigford
182
21k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
251
21k
Gamification - CAS2011
davidbonilla
80
5.1k
KATA
mclloyd
29
14k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
356
29k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
127
18k
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のコードを覗いて みて