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 Blocks の紹介 #AWSAmplifyJP
tacck
PRO
0
62
AWS Blocks が楽しい #ゆるWeb札幌
tacck
PRO
0
190
ゆるWeb勉強会@札幌 #31 #ゆるWeb札幌
tacck
PRO
0
89
Amplify でも Auth0 をいい感じに使いたい! - Cognito Identity Pool を使った認証情報の連携 #auth0
tacck
PRO
0
130
雑食エンジニアの生きる道〜AI時代のこれから #seb_summit
tacck
PRO
1
240
それでは聞いてください「Impeller導入に失敗しました」 #FlutterKaigi #skia
tacck
PRO
0
650
5年目から始める Vue3 サイト改善 #frontendo
tacck
PRO
3
750
Amazon Q Developer CLI でゲームと Amplify アプリを作ってみた #ゆるWeb札幌
tacck
PRO
0
90
ゆるWeb勉強会@札幌 #30 #ゆるWeb札幌
tacck
PRO
0
64
Other Decks in Technology
See All in Technology
20260906 「AWS運用入門」著者が教える、運用業務への生成AI活用入門
masaruogura
0
260
目の前の楽しいが人生を変える - コミュニティの螺旋の歩き方と楽しむコツ / change your life
soudai
PRO
4
480
AI 駆動 Terraform 開発/SRE_BizReach_MIXI_2
visional_engineering_and_design
4
2.1k
From Vanilla Kubernetes to a Batteries-Included Platform: Developer Experience at 1,300+ Clusters
yosshi_
0
680
NW運用でNWトポロジ可視化ツールに期待すること/shumoku-meetup1
corestate55
2
110
AIエージェントの自己改善をどう設計するか / How to Design Self-Improvement for AI Agents
22mi
3
1.3k
Snowflakeで実現する全社横断の顧客の声(VOC)分析・活用基盤@Snowflake World Tour Tokyo 2026
yuto16
0
190
The Agent Builder Loop from Daily Work to OSS
minorun365
PRO
3
140
「重なり」は迎える側がつくる ― 人もAIエージェントも歓迎するプロダクトエンジニアリング ―
go0517go
PRO
0
280
2026-09-09 【sigma_ucj#1】Sigma を IaC 管理したい! / IaC for Sigma
civitaspo
0
120
安心して変更できるWebフロントエンドの作り方
pirosikick
4
1.2k
GoにおけるFFIのこれまでとこれから
goccy
5
2.5k
Featured
See All Featured
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.6k
Deep Space Network (abreviated)
tonyrice
0
300
How to Create Impact in a Changing Tech Landscape [PerfNow 2023]
tammyeverts
56
3.5k
Music & Morning Musume
bryan
47
7.4k
Utilizing Notion as your number one productivity tool
mfonobong
4
580
It's Worth the Effort
3n
188
29k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
450
Statistics for Hackers
jakevdp
799
230k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
430
Leadership Guide Workshop - DevTernity 2021
reverentgeek
1
370
Building the Perfect Custom Keyboard
takai
2
870
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
660
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