Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
Goで作って学ぶWebSocket
Search
ryuichi1208
February 22, 2025
Technology
4.4k
5
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Goで作って学ぶWebSocket
ryuichi1208
February 22, 2025
More Decks by ryuichi1208
See All by ryuichi1208
そのasync、止まってない? ”鉄板”イベントループ ブロッキング処理検出術
ryuichi1208
1
2.2k
AIでサービス運用はどう変わるのか
ryuichi1208
0
200
入門 再発防止策
ryuichi1208
17
7.7k
障害対応からの学びと体制づくり
ryuichi1208
0
4
金曜日デプロイ、するかしないか.pdf
ryuichi1208
1
90
会話で作る信頼性
ryuichi1208
0
200
シグナル(Unix)と仲良くなる
ryuichi1208
1
200
LiteLLM Proxyの紹介
ryuichi1208
1
24
AI前提のサービス運用について再考する
ryuichi1208
6
1.5k
Other Decks in Technology
See All in Technology
10Xに技術的負債をもたらした「2つの境界の歪み」その構造と解消への営み
10xinc
0
2k
アクセスキーこわい やめかたと漏らさない工夫
sassssan68
1
290
あるけみー式LTスライド作成術
alchemy1115
2
220
【技術的負債conf】事業成長に伴う技術的負債の説明責任とAIによるモニタリング、認知的負債について
i35_267
3
1.6k
Genieを崇めよ
kameitomohiro
0
150
AI de Idea
kawaguti
PRO
2
120
アプリをもっと"iOSアプリっぽく"する小さな工夫 / Small Touches That Make Your App Feel More Like an iOS App
matsuji
2
910
株式会社シーエーシー エンジニア向け会社紹介資料
cac
0
57k
20260912_スクラムにジェネラリストは必要か
ryugen04
0
420
DEFCON_CHV_CTF_Write-up.pdf
bata_24
0
150
OpenTelemetryのメトリクスをCloudWatchに送ってPromQLで見てみた
ota1022
0
150
え、こんなに早く改修できるの?──新人エンジニアとスクラムマスターの2人が語る、AI×アジャイル開発の現場
ysasago
0
140
Featured
See All Featured
Design in an AI World
tapps
1
320
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.6k
Speed Design
sergeychernyshev
33
2.1k
Automating Front-end Workflow
addyosmani
1369
210k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.7k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.2k
Fireside Chat
paigeccino
43
4k
Side Projects
sachag
456
43k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
2
2.1k
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
300
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
123
22k
Transcript
Goで作って学ぶWebSocket 渡部⿓⼀ Open Source Conference 2025 Tokyo/Spring
• 渡部⿓⼀ • 仙台在住 • 障害対応、EOL対応 • 初OSC LT ⾃⼰紹介
WebSocketやってますか?
• お仕事でIVRのサービスをやってる • IVRとは? ◦ ⾃動⾳声応答システムのこと ◦ 着信時にオペレーターの代わりに⾃動⾳声で案内を提供 ▪ レストランとかの⾃動予約とかそういうサービス
◦ ⾳声のやり取りをするためにWebSocketを使ったりします
WebSocketの特徴
WebSocketの特徴 • 双⽅向通信‧全⼆重通信 ◦ クライアントとサーバーの両⽅が同時にデータを送受信可能 ◦ HTTPとは異なり、リクエスト‧レスポンスの概念がない • 持続的な接続を⼀度確⽴したあとは、明⽰的に切断されるまで維持される ◦
HTTPのように毎回接続を確⽴するオーバーヘッドがない • チャットアプリとかで使われている ◦ GitHub Actionsのログをリアルタイムでみれたり株価の表⽰とか
None
HTTPと全然違う!
⾃作しよう!
WebSocketを⾃作する • RFC6445 で定義されている • WebSocketのプロトコル概要 ◦ Step1: ハンドシェイク処理 ◦
Step2: フレームの解析 ◦ Step3: フレームの送受信 • OpenTelemetryでトレースとかログを最初から仕込んでいく
None
1. HandShake • クライアントからのリクエストを受け取る • Upgradeヘッダーを確認 • Sec-WebSocket-Keyを取得 ◦ WebSocketハンドシェイクで使⽤されるランダムな⽂字列
• Sec-WebSocket-Acceptを⽣成 • HTTP 101 Switching Protocols をレスポンス • WebSocket接続を確⽴
1. HandShake
Step2: フレームの解析 • ヘッダー解析 ◦ 最初の 2バイト を読み込み、FIN フラグと Opcode
を取得 ▪ Opcode(オペコード)は、WebSocketフレームにおける「操作コード」のことを指す ◦ Mask ビットをチェックし、ペイロード⻑を取得 • ペイロード⻑の処理 ◦ 126 の場合 → 追加の2バイト(16ビット)を読み込む ◦ 127 の場合 → 追加の8バイト(64ビット)を読み込む • マスク処理 ◦ クライアントからのデータは必ずマスクされる ◦ 4バイトのマスクキーを取得し、ペイロードデータを XOR でデコード • ペイロードの読み取り ◦ 取得した⻑さ分のデータを読み込む ◦ マスクがある場合、復号処理を⾏う
None
None
Step3: フレームの送受信 • データ送信 ◦ 送信者は、データをWebSocketフレームにエンコードして送信します ◦ フレームは常にテキストまたはバイナリのメッセージとして送られます ◦ メッセージが⻑い場合、複数のフレームに分割して送信されます
• データ受信 ◦ 受信者はフレームを解析し、データを取り出します ◦ WebSocketでは、各フレームの終わりが「フラグ」で⽰されるため、フレー ムが完全に送られたかを確認できます ◦ 受信側はフレームを組み⽴て、完全なメッセージを取得します
None
None
今後の展望
今後の展望 • サブプロトコルとかも実装したい • プロトコルの中⾝まで解釈するProxyみたいなのを作ってみたい ◦ NginxでもProxyはできるがTCPの通信として流すくらいでアップストリーム の間に⼊るわけではなさそう
まとめ
まとめ • 全⼆重通信(フルデュプレックス)楽しい • 全部で1500⾏くらいで割とシンプル • 情報が結構豊富。WebSocketだけの本もオライリーから出ている • Copilotとかでいい感じに先に実装されてしまっているのでスクラッチ感は薄め
よき双⽅向通信ライフを!
参考書籍 • Websocket: Lightweight Client-Server Communications / O'Reilly Media •
Real World HTTP 第3版 / オライリー‧ジャパン • ハイパフォーマンス ブラウザネットワーキング / オライリー‧ジャパン