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.3k
AIでサービス運用はどう変わるのか
ryuichi1208
0
230
入門 再発防止策
ryuichi1208
17
8k
SREの組織構造と実践.
ryuichi1208
0
330
信頼性・システムの観測・障害対応
ryuichi1208
1
17
障害対応からの学びと体制づくり
ryuichi1208
0
1.2k
金曜日デプロイ、するかしないか.pdf
ryuichi1208
1
500
会話で作る信頼性
ryuichi1208
0
210
シグナル(Unix)と仲良くなる
ryuichi1208
1
210
Other Decks in Technology
See All in Technology
Oracle Database Security 詳細解説
oracle4engineer
PRO
2
270
生き様としてのSRE
hokkai7go
1
170
PostgreSQL オプティマイザ統計の秘密
nori_shinoda
0
360
慶應義塾大学 AI実践05 論文執筆の仕組み化
keio_smilab
PRO
7
3.7k
The future of architectural work
ufried
0
170
企画からFlutter実装まで、1つの機能を一貫して開発したプロセスと成果物
khiroyuki1003
1
160
Gifu WordPress Meetup #200 に向けて、私たちには何ができるだろうか?/ 2026-11-07 Gifu WordPress Meetup
torounit
0
170
Kiro Crew 入門 (手を離しても進む仕事) | 目指せ Kiro マスター 11
inariku
PRO
3
450
業務でAWSをあまり使っていない私が、AWSへのモチベを保つ方法
smt7174
0
160
cdkd (CDK Direct)
gotok365
3
250
AI AgentによるEmbedded SREの取り組み
tgidgd
1
350
分析作業をどこまで任せるか自分で決められる AIネイティブBI『Golden Analytics』が 良さげな話 /golden-analytics-is-ai-native-bi
shinyaa31
0
120
Featured
See All Featured
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
510
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
350
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.7k
Evolving SEO for Evolving Search Engines
ryanjones
0
360
Designing for Performance
lara
612
70k
Automating Front-end Workflow
addyosmani
1370
210k
Navigating the Design Leadership Dip - Product Design Week Design Leaders+ Conference 2024
apolaine
2
510
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
Self-Hosted WebAssembly Runtime for Runtime-Neutral Checkpoint/Restore in Edge–Cloud Continuum
chikuwait
0
930
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.7k
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
470
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版 / オライリー‧ジャパン • ハイパフォーマンス ブラウザネットワーキング / オライリー‧ジャパン