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
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
"AWSはちょっと苦手"でも大丈夫。AWS Blocks で手軽に作る Flutter のバックエンド #FlutterKaigi
tacck
PRO
0
78
Lockage Introduction v0.9.6
tacck
PRO
0
22
Lockage Introduction v0.9.6 (JA)
tacck
PRO
0
50
ゆるWeb勉強会@札幌 紹介 2026年9月版 #seb_sapporo #ゆるWeb札幌
tacck
PRO
0
58
AWS Blocks の紹介 #AWSAmplifyJP
tacck
PRO
0
81
AWS Blocks が楽しい #ゆるWeb札幌
tacck
PRO
0
500
ゆるWeb勉強会@札幌 #31 #ゆるWeb札幌
tacck
PRO
0
120
Amplify でも Auth0 をいい感じに使いたい! - Cognito Identity Pool を使った認証情報の連携 #auth0
tacck
PRO
0
140
雑食エンジニアの生きる道〜AI時代のこれから #seb_summit
tacck
PRO
1
270
Other Decks in Technology
See All in Technology
キヨさん、67歳。AIコーディングエージェントに挑む
happysamurai294
0
110
cdk deployとcdkd deploy、実際にデプロイして5倍速近くの差を実測した
yama3133
1
110
Obsidian Vault Architectures
x5gtrn
PRO
0
190
Adversary Infrastructure Hunting101
disconinja
0
170
構造で守らせる データ・法務・セキュリティ・開発チームとつくる AI時代のデータガバナンスとデータ基盤のリアル
legalontechnologies
PRO
2
630
CSS2026:OWS研究会・招待講演「世界観を、実装する」
atsush1_sada
2
340
Deep Data Security 機能解説
oracle4engineer
PRO
3
950
Vue.jsのGitHubから学ぶ意思決定
yut0naga1_fa
1
320
You Have Agency(サンキュー、Ruby)
snoozer05
PRO
4
490
LLMの知識とAIエージェント
happysamurai294
0
110
AWS DevOps Agentはどこまで任せられるか 〜機能の現在地と、機能拡張の実践〜
nyankotaro
0
270
1週間、Opus封印でお願いします
kintotechdev
0
350
Featured
See All Featured
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
エンジニアに許された特別な時間の終わり
watany
109
250k
Abbi's Birthday
coloredviolet
4
10k
Done Done
chrislema
187
17k
Believing is Seeing
oripsolob
1
250
How to Align SEO within the Product Triangle To Get Buy-In & Support - #RIMC
aleyda
2
1.8k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
7k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
280
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
450
AI: The stuff that nobody shows you
jnunemaker
PRO
10
1.2k
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