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
今更 WebSocket を学んでみた話 #sacss
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
Kihara, Takuya
PRO
February 12, 2020
Technology
420
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
今更 WebSocket を学んでみた話 #sacss
SaCSS vol.111
https://connpass.com/event/164156/
Kihara, Takuya
PRO
February 12, 2020
More Decks by Kihara, Takuya
See All by Kihara, Takuya
ゆるWeb勉強会@札幌 紹介 2026年9月版 #seb_sapporo #ゆるWeb札幌
tacck
PRO
0
49
AWS Blocks の紹介 #AWSAmplifyJP
tacck
PRO
0
76
AWS Blocks が楽しい #ゆるWeb札幌
tacck
PRO
0
440
ゆるWeb勉強会@札幌 #31 #ゆるWeb札幌
tacck
PRO
0
110
Amplify でも Auth0 をいい感じに使いたい! - Cognito Identity Pool を使った認証情報の連携 #auth0
tacck
PRO
0
140
雑食エンジニアの生きる道〜AI時代のこれから #seb_summit
tacck
PRO
1
270
それでは聞いてください「Impeller導入に失敗しました」 #FlutterKaigi #skia
tacck
PRO
0
690
5年目から始める Vue3 サイト改善 #frontendo
tacck
PRO
3
770
Amazon Q Developer CLI でゲームと Amplify アプリを作ってみた #ゆるWeb札幌
tacck
PRO
0
91
Other Decks in Technology
See All in Technology
Futexes the good, the bad, the ugly
ennael
PRO
0
120
ai_cording_with_k8s_knowledge.pdf
mochizuki875
1
280
Databricksメトリクスビューはじめてのもくもく会
taka_aki
0
200
React Nativeでの OTA Updateって、 どう説明する?
ichiki1023
0
150
使いこなすために知っておきたい Azure SRE Agent アンチパターン
torumakabe
2
350
購入ドメインでの課題と取り組み
ykagano
0
140
オブザーバビリティを高める AI エージェント体験を考える / Designing AI Agent Experiences That Enhance Observability
aoto
PRO
2
310
生成AIで高い生産性を求められて、 悩み、乗り越えた話
mot_techtalk
2
130
[2026 Oracle Technical Deep Dive] エンタープライズAIエージェントを支えるOCIソリューション。ラインナップと特徴を理解しよう! (2026年9月17日開催)
oracle4engineer
PRO
0
520
[2026 Oracle Technical Deep Dive] Apache Iceberg × Oracle AI Database -Oracle Autonomous AI Lakehouseが実現するAI時代のデータ基盤- (2026年9月17日開催)
oracle4engineer
PRO
0
110
AI Made Us Faster at Solving the Wrong Problems
marceloancelmo
0
160
20260930_Gemma4_Hands-on
tsho
0
230
Featured
See All Featured
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
2
930
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
The World Runs on Bad Software
bkeepers
PRO
72
12k
Ten Tips & Tricks for a 🌱 transition
stuffmc
1
250
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
380
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
How to Get Subject Matter Experts Bought In and Actively Contributing to SEO & PR Initiatives.
livdayseo
0
210
Context Engineering - Making Every Token Count
addyosmani
9
1.2k
Git: the NoSQL Database
bkeepers
PRO
433
67k
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
480
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.6k
Side Projects
sachag
456
43k
Transcript
גࣜձࣾϊʔεσΟςʔϧ ։ൃ%JWJTJPOٕज़ਪਐ(SPVQ UBDDLݪ !UBDDL 4B$44WPM TBDTT ࠓߋ8FC4PDLFUΛ ֶΜͰΈͨ ݄
!UBDDL 4B$44WPM TBDTT • ໊લ ݪ / @tacck •
ॴଐ גࣜձࣾϊʔεσΟςʔϧ ։ൃDivision ٕज़ਪਐGroup / Leader • ओ࠵ • ΏΔWebษڧձ@ࡳຈ • εϚʔτεϐʔΧʔͰ༡΅͏ձ@ࡳຈ • ͖ͳϑΟΪϡΞεέʔτͷٕ εϓϨουɾΠʔάϧ ୭ PHP Conference Hokkaido 2019
!UBDDL 4B$44WPM TBDTT 8FC4PDLFUͱ
!UBDDL 4B$44WPM TBDTT • WebΫϥΠΞϯτ - WebαʔόؒͰ͑Δɺ ͓खܰͳํ௨৴ͷن֨ɻ • Webϒϥβ؍ͰɺJavaScriptͷ
ΠϕϯτϕʔεͰ࣮Մೳɻ → ΠϕϯττϦΨʔͰDOMߋ৽͕Ͱ͖Δ →→ νϟοτͳͲͷϦΞϧλΠϜΞϓϦ͕࡞Γ͍͢ɻ 8FC4PDLFUͱ
!UBDDL 4B$44WPM TBDTT )551௨৴ͱ
!UBDDL 4B$44WPM TBDTT ΫϥΠΞϯτͰ͢ αʔόʔͰ͢
!UBDDL 4B$44WPM TBDTT ௨৴͔ͯ͑͑͠? Ͱ͖ͱΔͰɻ ͑͑Αɻ ͦͬͪ४උ Ͱ͖ͱΔΜ͔? SYN ACK
SYN-ACK ଓ։࢝ TCP
!UBDDL 4B$44WPM TBDTT ͋Εͪΐ͏͍ͩɻ ͑͑Αɻ ड͚औͬͯɻ Request Response ใऔಘ HTTP
GET
!UBDDL 4B$44WPM TBDTT ͜Ε͢Θɻ ͑͑Αɻ ड͚औͬͨͰɻ Request Response ใૹ৴ HTTP
POST/PUT/ DELETE
!UBDDL 4B$44WPM TBDTT … … ଓҡ࣋ HTTP KeepAlive
!UBDDL 4B$44WPM TBDTT ͑͑Ͱɻ ͢Μͨ͠͠ɺ ͏͑͑Ζɻ ଓऴྃ TCP ΄ͳ·ͨͳɻ ΄ͳɺ͍͞ͳΒɻ
ACK FIN ACK FIN
!UBDDL 4B$44WPM TBDTT • ϒϥβ͔Βαʔόʔʹݺͼ͔͚ͯ௨৴։࢝ (TCP) • ϒϥβܖػͰαʔόʔͱσʔλૹड৴ (HTTP) •
ΓͱΓ͕ऴΘͬͯগ͠ܨ͍ͩ·· (HTTP/1.1 KeepAlive) • ͠Β͘ܦͭͱ௨৴ऴྃ )551 ͷجຊ
!UBDDL 4B$44WPM TBDTT • ͠Β͘ܦͬͨ͋ͱʹ௨৴͠Α͏ͱ͢Δͱɺ ࠷ॳͷʮѫࡰʯ෦͔Β࢝·Δɻ • ͕͔͔࣌ؒΔɻ • ௨৴։࢝Ϛγϯతʹίετ͕ߴ͍ɻ
• ʮΫϥΠΞϯτ͔Βʯ͔͠σʔλૹड৴։࢝Ͱ͖ͳ͍ɻ • αʔόʔ͔ΒใΛ͍͑ͨɺͱ͍͏γεςϜΛ ࣮ݱͰ͖ͳ͍ɻ )551 ͷ՝
!UBDDL 4B$44WPM TBDTT • ͠Β͘ܦͬͨ͋ͱʹ௨৴͠Α͏ͱ͢Δͱɺ ࠷ॳͷʮѫࡰʯ෦͔Β࢝·Δɻ • ͕͔͔࣌ؒΔɻ • ௨৴։࢝Ϛγϯతʹίετ͕ߴ͍ɻ
• ʮΫϥΠΞϯτ͔Βʯ͔͠σʔλૹड৴։࢝Ͱ͖ͳ͍ɻ • αʔόʔ͔ΒใΛ͍͑ͨɺͱ͍͏γεςϜΛ ࣮ݱͰ͖ͳ͍ɻ • HTTP/2.0 ͔ΒͷɺࠓճׂѪɻ )551 ͷ՝
!UBDDL 4B$44WPM TBDTT • WebSocket Λ͏ͱɺ αʔόʔܖػͰσʔλૹ৴Λߦͳ͑Δɻ (ैདྷͷ HTTP ͚ͩͰͰ͖ͳ͔ͬͨɻ)
• ΫϥΠΞϯτɺ JavaScript ͷΠϕϯτͱͯ͠ ॲཧͰ͖ΔͷͰɺ࣮қͦ͜·Ͱߴ͘ͳ͍ɻ • αʔόʔͷ࣮ɺجຊͦ͜·Ͱ͘͠ͳ͍ɻ 8FC4PDLFUͰ՝ղܾ
!UBDDL 4B$44WPM TBDTT WebSocket Θͤͯ Request Response WebSocket։࢝ HTTP GET
͑͑Ͱɻ ͔ͬ͜Βઌ WebSocketͰɻ WebSocket
!UBDDL 4B$44WPM TBDTT ΫϥΠΞϯτ͔Β WebSocket ΫϦοΫ͞ΕͨͰ Message ͑͑ײ͡ͷॲཧ ͠ͱ͘Θɻ
!UBDDL 4B$44WPM TBDTT αʔόʔ͔Β WebSocket ͑͑ײ͡ͷॲཧ ͠ͱ͘Θɻ Message σʔλߋ৽͞ΕͨͰ
!UBDDL 4B$44WPM TBDTT ࣮ફ ؆୯ͳϦΞϧλΠϜථΞϓϦ
!UBDDL 4B$44WPM TBDTT • Webαʔό (Node.js) • “post”ϝοηʔδΛड͚औͬͨΒɺ idΛ֬ೝͯ͠ΧϯτΞοϓɻ •
ΧϯτΞοϓޙʹɺ“selections”ϝοηʔδΛ શΫϥΠΞϯτʹ݁Ռૹ৴ɻ ؆୯ͳϦΞϧλΠϜථΞϓϦ
!UBDDL 4B$44WPM TBDTT socket.on('message', message => { console.log(message) const obj
= JSON.parse(message) const type = obj.message const data = obj.data if (type === 'post') { selections[data.id].count++ } wss.clients.forEach(client => { client.send(JSON.stringify( { message: 'selections', data: selections } )) }) })
!UBDDL 4B$44WPM TBDTT • Webϒϥβ (Vue.js) • “selections”ϝοηʔδΛड͚औͬͨΒɺ બࢶͷதͱΧϯτΛߋ৽ɻ •
ϘλϯΫϦοΫͰɺ “post”ϝοηʔδૹ৴ɻ ؆୯ͳϦΞϧλΠϜථΞϓϦ
!UBDDL +BWB%PͰ͠ΐ͏ KBWBEP mounted() { this.ws = new WebSocket('wss://tacck-ws.herokuapp.com/') const
self = this this.ws.addEventListener('message', message => { const obj = JSON.parse(message.data) const type = obj.message const data = obj.data if (type === 'selections') { self.selections = data } }) }, methods: { send(id) { this.ws.send(JSON.stringify( { message: 'post', data: { id: id } } )) } }
!UBDDL +BWB%PͰ͠ΐ͏ KBWBEP ࢼͦ͏ https://github.com/tacck/websocket-sample-client-vuejs https://github.com/tacck/websocket-sample-server-nodejs
!UBDDL 4B$44WPM TBDTT ࣮ફ ϦΞϧλΠϜ ΞϯέʔτγεςϜ
!UBDDL 4B$44WPM TBDTT ·ͱΊ
!UBDDL 4B$44WPM TBDTT • ैདྷͷ HTTP/1.0,1.1 Ͱ αʔόʔܖػͰσʔλૹड৴͕Ͱ͖ͳ͔ͬͨɻ • WebSocket
ͰͦΕΛղܾՄೳɻ • ΑΓൃలͨ͠Έ HTTP/2.0 Ҏ߱ʹ͋Δ͕ɺ ͦΕ·ͨผͷ͓ɻ ·ͱΊ
!UBDDL 4B$44WPM TBDTT FOE