WebSocket ͲΕ͘Β͍௨͡Δͷ͔ͷ౷ܭ© Tsukuru Tanimichi (@ttanimichi), 2017 1
View Slide
TL;DR• Jxck ͞Μͷϒϩά• Socket.IO ඞཁ͔?ʯ·ͨʮWebSocket ௨Δͷ͔?ʯʹ͍ͭͯ 2016 ൛• ੜͷ WebSocket ͲΕ͘Β͍௨͡Δͷ͔• production Ͱ౷ܭΛग़ͨ͠ͷͰ݁ՌΛڞ༗͠·͢© Tsukuru Tanimichi (@ttanimichi), 2017 2
TL;DR• ౷ܭΛग़ͨ݁͠Ռɺ• 0.1 %͘Β͍͕௨͡ͳ͍• ڐ༰Ͱ͖Δཁ݅ͳΒੜͷ wss Ͱྑ͍͔• ActionCable Λ͏ਓཹҙ͠·͠ΐ͏Ͷ© Tsukuru Tanimichi (@ttanimichi), 2017 3
WebSocket ͬͯ IE11 Ҏ߱ͳΒ͑ΔΜ͡Όͳ͔͚ͬͨͬʁ© Tsukuru Tanimichi (@ttanimichi), 2017 4
ωοτϫʔΫͷͰ௨͡ͳ͍• Connection: Upgrade ϔομͰଓΛམͱ͢ Proxy LB Firewall• ࣌ؒଓ͞Ε͍ͯΔ TCP ίωΫγϣϯΛམͱ͢ύʔιφϧϑΝΠΞΥʔϧৄ͘͠ Jxck ͞ΜͷϒϩάΛಡΜͰ͍ͩ͘͞https://blog.jxck.io/entries/2016-08-22/websocket-connectivity.html© Tsukuru Tanimichi (@ttanimichi), 2017 5
ߏͱௐࠪํ๏• Socket.IO (Node.js)• WebSocket ͕௨͡Ε WebSocket (wss)• ௨͡ͳ͚Ε HTTP (polling) ʹϑΥʔϧόοΫ• ΫϥΠΞϯτ͔ΒͷϝοηʔδΛड৴ͨ࣌͠ʹWebSocket Ͱ௨৴͍ͯ͠Δ͔ɺͦΕͱ HTTP ͰϑΥʔϧόοΫ͍ͯ͠Δͷ͔ϩάʹు͍ͨ© Tsukuru Tanimichi (@ttanimichi), 2017 6
ߏͱௐࠪํ๏• ͜ͷൃදͰɺΫϥΠΞϯτ͕ WebSocket ʹରԠ͍ͯ͠ͳ͍߹ରͱ͠·ͤΜ• εϚϗͷωΠςΟϒΞϓϦͰɺsocket.io-client Λ͍·ͨ͠• ϥΠϒϥϦΛ͍ͬͯΔͷͰΫϥΠΞϯτWebSocket Λඞͣ͑Δ© Tsukuru Tanimichi (@ttanimichi), 2017 7
౷ܭ݁Ռtransport countwebsocket 106,592polling 112 0.1 % ͕ HTTP (polling) ʹϑΥʔϧόοΫ© Tsukuru Tanimichi (@ttanimichi), 2017 8
མͪͯͨ connection ͷ ISP© Tsukuru Tanimichi (@ttanimichi), 2017 9
·ͱΊ• ͠ HTTP ͰϑΥʔϧόοΫͯ͠ͳ͔ͬͨΒ 0.1 %͕ ܨ͕Βͳ͍• ΆͭΆͭαϙʔτʹ͍߹Θͤͱ͔དྷͦ͏• ActionCable ʹϑΥʔϧόοΫՃͯ͘͠ΕΔgem ͱ͔ͳ͍ΜͰ͔͢Ͷ© Tsukuru Tanimichi (@ttanimichi), 2017 10
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠© Tsukuru Tanimichi (@ttanimichi), 2017 11