Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
今更 WebSocket を学んでみた話 #sacss
Search
Kihara, Takuya
PRO
February 12, 2020
Technology
410
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
Amplify でも Auth0 をいい感じに使いたい! - Cognito Identity Pool を使った認証情報の連携 #auth0
tacck
PRO
0
110
雑食エンジニアの生きる道〜AI時代のこれから #seb_summit
tacck
PRO
1
230
それでは聞いてください「Impeller導入に失敗しました」 #FlutterKaigi #skia
tacck
PRO
0
600
5年目から始める Vue3 サイト改善 #frontendo
tacck
PRO
3
710
Amazon Q Developer CLI でゲームと Amplify アプリを作ってみた #ゆるWeb札幌
tacck
PRO
0
82
ゆるWeb勉強会@札幌 #30 #ゆるWeb札幌
tacck
PRO
0
57
Flutter を始めよう! - Flutter の開発現場から
tacck
PRO
0
220
GitHub Actions で Flutter アプリの CI/CD をやってます #ゆるWeb札幌
tacck
PRO
0
560
ゆるWeb勉強会@札幌 #29 #ゆるWeb札幌
tacck
PRO
0
240
Other Decks in Technology
See All in Technology
クラウドセキュリティ入門 ~安全なクラウド利用のための基礎知識~
lhazy
11
8.1k
つくって納得、つかって実感! 大規模言語モデルことはじめ ver2.0
recruitengineers
PRO
3
1k
20260801_スクフェス大阪
kgnkhkr
2
1.2k
モダンフロントエンド 開発研修
recruitengineers
PRO
3
510
【CEDEC2026】『ウマ娘 プリティーダービー』 英語版のキャラクターの方言や口調をローカライズするための創造的アプローチ
cygames
PRO
1
190
【CEDEC2026】『GRANBLUE FANTASY: Relink - Endless Ragnarok』のバトル制作事例 ~最高のキャラゲーを目指して~
cygames
PRO
0
210
Eight Engineering Unit 紹介資料
sansan33
PRO
3
8.1k
サイバー捜査員研修(前半)
nomizone
1
1.8k
第3回しろおびセキュリティスポンサーセッション
log0417
0
150
Sansan Engineering Unit 紹介資料
sansan33
PRO
1
4.9k
AWS ネットワーク構築でハマった(ハマりかけた) 5選とそこから得た教訓
nagisa53
4
190
Contract One Engineering Unit 紹介資料
sansan33
PRO
0
19k
Featured
See All Featured
Optimising Largest Contentful Paint
csswizardry
37
3.9k
VelocityConf: Rendering Performance Case Studies
addyosmani
333
25k
Speed Design
sergeychernyshev
33
2k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
480
エンジニアに許された特別な時間の終わり
watany
108
250k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
11k
SEO in 2025: How to Prepare for the Future of Search
ipullrank
3
3.7k
Unsuck your backbone
ammeep
672
58k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
460
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.3k
State of Search Keynote: SEO is Dead Long Live SEO
ryanjones
0
240
What's in a price? How to price your products and services
michaelherold
247
13k
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