Upgrade to Pro — share decks privately, control downloads, hide ads and more …

WebSocket, Socket.io

Sponsored · Your Podcast. Everywhere. Effortlessly. Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
Avatar for Teddy Teddy
August 07, 2018

WebSocket, Socket.io

Avatar for Teddy

Teddy

August 07, 2018
Tweet

More Decks by Teddy

Other Decks in Programming

Transcript

  1. Socket.io • 2010֙ ӝઓ੄ HTTP োѾ੄ ݆਷ ޙઁ੼ਸ ೧ѾೞҊ੗ ఍ࢤ.


    (ଵҊ: http://jokerpack.blog.me/70184017711) • Node.js (JavaScript) ӝ߈ਵ۽ पदр HTTP ࢲߡܳ ѐߊ ೡ ࣻ ੓ח য়೑ࣗझ ۄ ੉࠳۞ܻ. • WebSocket, FlashSocket, AJAX Long Polling, AJAX Multi part Streaming, IFrame, JSONP Polling ਸ ೞա੄ API ۽ ୶࢚ച. !2
  2. Why Socket.io? • JavaScript ۽ Node.js ਤীࢲ ೣԋ ֥ ࣻ

    ੓׮! • ѐߊ੗о п ӝࣿਸ Ө੉ ੉೧ೞ૑ ޅೞѢա ҳഅ ߑߨਸ ੜ ঌ૑ ޅ೧ب ࢎਊೡ ࣻ ੓ ѱՔ ѐߊغয ୡӝ ѐߊ द ࠺ૉפझ ۽૒ী݅ ૘઺ೡ ࣻ ੓׮. • জ ௿ۄ੉঱౟ܳ ನೣೞৈ, ࠳ۄ਋੷৬ ਢ ࢲߡ੄ ઙܨ৬ ߡ੹ਸ ౵ঈೞৈ о੢ ੸೤ ೠ ాन ߑधਸ ౵ঈೞৈ োѾਸ ೧઱ӝী ҳഋ HTTP োѾب ૑ਗਸ ೡ ࣻ ੓׮. !3
  3. HTTP • HTTP ח <௿ۄ੉঱౟ীࢲ ࢲߡ۽> ੄ ױߑೱ ాनਸ ݾ੸ਵ۽

    ఍ࢤ೮׮. • TCP/IP ҅க ਤী ઓ੤ೞח HTTP ী ӝ߈ೠ ਢ ాन਷ ࠺োѾ ૑ೱ੸ ࢿѺਸ о૑ Ҋ ੓׮. ௿ۄ੉঱౟ח ࢲߡ۽ ਃ୒(Request)ਸ ೞҊ ࢲߡח ੉ী ਽׹(Response) ਸ ೞҊ ੉റ োѾ਷ ײ൦׮. • ೐۽ష௒ ౠࢿ࢚ (1) ࢲߡо ௿ۄ੉঱౟۽ ؘ੉ఠܳ ઱ח Ѫ (2) पदрਵ۽ ؘ੉ఠܳ ઱Ҋ ߉ח Ѫী ೠ҅о ੓঻׮. ಞߨਸ ࢎਊೞ؊ۄب Header, Body ؘ੉ఠী ݆਷ য়ߡ ೻٘о ߊࢤ೮׮. • ࢲߡ৬ ૑ࣘ੸ੋ োѾਸ ೞӝ ਤ೧ աৡ ৈ۞о૑ ಞߨ = Comet
 (௿ۄ੉঱౟੄ ݺद੸ੋ ਃ୒ হ੉ ࢲߡীࢲ ௿ۄ੉঱౟۽ ؘ੉ఠܳ ࠁղח ೐۽Ӓې߁ ಁఢ, ݽ؛) !4
  4. COMET • Polling (ಫ݂) • ௿ۄ੉঱౟о HTTP Request ܳ ҅ࣘ

    ਃ୒೧ ੉߮౟੄ ղਊਸ ੹׳߉Ҋ সؘ੉౟ܳ ੌ ੿ ઱ӝ۽ ߈ࠂೞח ߑध • ઱ӝо ૣਵݶ ࢲߡ੄ ࢿמী ࠗ׸੉ оҊ, ઱ӝо ӡݶ पदр ࢿמ੉ ডр ڄয૑ח ޙ ઁо ੓׮. • ҳഅ੉ ӭՔೞ૑ ޅೞҊ, ؀৉಩੄ խ࠺о बೞ׮. !5
  5. COMET • Long-Polling (܄-ಫ݂) • ੌױ ௿ۄ੉঱౟о HTTP Request ܳ

    ਃ୒ ೠ׮. ੉ ࢚క۽ ҅ࣘ ӝ׮ܻ׮о ࢲߡীࢲ ߸҃ ղਊ੉ ࢤӝח ࣽр (੹׳ೡ ੉߮౟о ࢤӡ ٸ) ೧׼ ௿ۄ੉঱౟۽ Ӓ ࣽр Response ܳ ੹׳ೞݴ োѾ੉ ઙܐػ׮. ӒܻҊ ҍ߄۽ ௿ۄ੉঱౟ীࢲ ׮द HTTP Request Api ܳ զ۰ ࢲߡ੄ ׮਺ ੉߮౟ܳ ӝ׮ܻѱ غח ߑध. • पदр ݫद૑ ੹׳੉ ઺ਃೞ૑݅ ࢲߡ੄ ࢚క ߸҃੉ ࠼ߣ൤ ߊࢤೞ૑ח ঋח ࢲ࠺झী ੸೤ೞ׮. • Polling/Long Polling ਷ ࠼ب੄ ੿بী ର੉о ੓ਸ ࡺ, োѾ ૑ࣘࢿ੉ হח HTTP ۽ पदрࢿਸ ഛࠁೞӝ ਤ೧ ௿ۄ੉঱౟о ࢲߡী ҅ࣘ ࢜۽਍ HTTP োѾਸ ࢤࢿೞחؘ, ੉ח Ԩ ݆਷ য়ߡ೻٘ܳ ਬߊೠ׮. • ҳഅ੉ ӭՔೞ૑ ޅೞҊ, ؀৉಩੄ խ࠺о बೞ׮. !7
  6. COMET • Streaming (झ౟ܻ߁) • Long Polling җ ݃ଲо૑۽ ௿ۄ੉঱౟ীࢲ

    ࢲߡ۽ ੌױ HTTP Request ܳ զܽ׮. ࢲߡীࢲ ௿ۄ੉঱౟۽ ੉߮౟ܳ ੹׳ೡ ٸ ೧׼ ਃ୒ਸ Ր૑ ঋҊ ೙ਃೠ ݫद૑݅ ࠁղ ӝܳ ߈ࠂೞח ߑध੉׮. Long Polling ী ࠺೧ ࢲߡীࢲ ݫद૑ܳ ࠁղҊب ׮द HTTP Request োѾਸ ೞ૑ ঋইب غয ࠗ׸੉ ҃хؼѪਵ۽ ࠁੋ׮. • োѾਸ ӡѱ ݛҊ ੓ח ҃਋ী ؀ೠ ҙܻо ࠂ੟ೞҊ য۵׮. • ҳഅ੉ ӭՔೞ૑ ޅೞҊ, ؀৉಩੄ խ࠺о बೞ׮. !9
  7. Traffic Channel • NameSpace (؀࠙ܨ) • Room (઺࠙ܨ, ଻օ) •

    User (Session ID, ѐੋ) !11 WebSocket • ਢ ࢲߡ৬ ਢ ࠳ۄ਋੷ р੄ पदр ాनਸ ਤೠ নߑೱ ాनਊ ӝࣿ ӏѺ, ӝઓ੄ HTTP ӝ߈੄ ױߊࢿ ো Ѿٜ੄ ޙઁܳ ೧Ѿೞӝ ਤ೧ HTML5 ಴ળ੄ ੌࠗ۽ ١੢ೠ ࣛܖ࣌. • 2008֙ 6ਘ, TCP ӝ߈ ࣗ௄ API ܳ ؀୓ೡ ݾ੸ਵ۽ HTML5 ীࢲ TCPConnection ਵ۽ ѐߊ غ঻׮. 2011֙ IETFী ੄೧ RFC 6455۽ ಴ળചغ঻ਵݴ ਢ IDL ੄ ਢࣗ௄ APIח W3Cী ੄೧ ಴ળചغҊ ੓ ׮. • ӝઓ੄ ੌ߈ TCP Socket җ ׮ܲ ੼਷ ୭ୡ ੽ࣘ੉ ੌ߈ HTTP Request ੄ HandShaking җ੿ (Protocol Overhead) ਸ ా೧ ੉ܖয ૓׮ח ੼. ӝઓ੄ 80, 443 ನ౟۽ ੽ࣘਸ ೞ޲۽ ୶о۽ ߑച߷ ࢸ ੿ হ੉ নߑೱ ాन੉ оמೞҊ, HTTP ӏѺੋ CORS ੸ਊ੉ա ੋૐ ١੄ җ੿ਸ ӝઓҗ زੌೞѱ оઉт ࣻ ੓ח Ѫ੉ ੢੼੉ ੓׮. ߹ب੄ ೻؊ ١ਵ۽ ֤ܻ੸ੋ ؘ੉ఠ ൒ܴ ױਤܳ ੉ਊೞৈ ৈ۞ ѐ੄ ழ֏࣌ਸ ݛח ബҗܳ ղח ߑध੉׮. • ࠛ೙ਃೠ Header ؘ੉ఠܳ ઱Ҋ߉૑ ঋਵפ Overhead ب ഛप൤ ੸׮. ೞ૑݅ ই૒ ݆਷ ࠳ۄ਋੷ীࢲ੄ ૑ਗ੉ ࠗ઒ೞৈ ࠺ૉפझ੄ ਃҳࢎ೦ਸ 100% ୽઒दఃӝীח য۰਎ ࣻ ੓׮.
  8. Socket.io • 2010֙ ӝઓ੄ HTTP োѾ੄ ݆਷ ޙઁ੼ਸ ೧ѾೞҊ੗ ఍ࢤ.


    (ଵҊ: http://jokerpack.blog.me/70184017711) • Node.js (JavaScript) ӝ߈ਵ۽ पदр HTTP ࢲߡܳ ѐߊ ೡ ࣻ ੓ח য়೑ࣗझ ۄ ੉࠳۞ܻ. • WebSocket, FlashSocket, AJAX Long Polling, AJAX Multi part Streaming, IFrame, JSONP Polling ਸ ೞա੄ API ۽ ୶࢚ച. !12
  9. Why Socket.io? • JavaScript ۽ Node.js ਤীࢲ ೣԋ ֥ ࣻ

    ੓׮! • ѐߊ੗о п ӝࣿਸ Ө੉ ੉೧ೞ૑ ޅೞѢա ҳഅ ߑߨਸ ੜ ঌ૑ ޅ೧ب ࢎਊೡ ࣻ ੓ ѱՔ ѐߊغয ୡӝ ѐߊ द ࠺ૉפझ ۽૒ী݅ ૘઺ೡ ࣻ ੓׮. • জ ௿ۄ੉঱౟ܳ ನೣೞৈ, ࠳ۄ਋੷৬ ਢ ࢲߡ੄ ઙܨ৬ ߡ੹ਸ ౵ঈೞৈ о੢ ੸೤ ೠ ాन ߑधਸ ౵ঈೞৈ োѾਸ ೧઱ӝী ҳഋ HTTP োѾب ૑ਗਸ ೡ ࣻ ੓׮. !13
  10. Connection • Connection • ୐ োѾ द HandShake (e.g. TCP

    3-way HandShake) җ੿ਸ ా೧ Client Session ID, Time-out, Browser ١ ੿ࠁܳ ઱Ҋ ߉Ҋ ࢸ੿ਸ ݃ޖܻ ೠ׮. • Event • Public (੗नਸ ನೣೠ ݽٚ Client ীѱ) • Broadcasting (੗नਸ ઁ৻ೞҊ ݽٚ Client ীѱ) • Private (ౠ੿ Client ীѱ) !14
  11. Traffic Channel • NameSpace (؀࠙ܨ) • Room (઺࠙ܨ, ଻օ) •

    User (Session ID, ѐੋ) <Room1: partnerID/ clientID> - loadMessage - loadOldMessage - updateClientDetail - updatePartnerDetail <Room2: counselingNo> - reloadMessage - reloadMessageAll - messageTyping - messageStopTyping <User: Client ID, Partner ID> - loadCounselingList - loadMessage - loadOldMessage <NameSpace: Client, Partner (Status)> !15
  12. Engine.io • Socket.io ੄ ղࠗ ূ૓, Engine.io • Socket.io о

    ࠺ૉפझ ਃҳࢎ೦ਸ ୽઒दఃӝ য۰਎ Ѣۄח ౸ױೞী ߓನغ঻׮. • Connect, Disconnect ١ ӝࠄ Event ঌҊ્ܻ݅ ੘ࢿغয ੓׮. • WebSocket োѾ ߑध਷ ࢎਊغ૑ ঋਵݴ Polling ١ Comet ੄ ాन ߑधਵ۽ ҳࢿ غয ੓׮. !16
  13. Trouble Shooting ↟4FTTJPO*%6OLXPO ↟ <Nginx> <Node> 1 Core 8764 <Node>

    2 Core 8765 <Node> 3 Core 8766 <Node> 4 Core 8767 <Node> 5 Core 8768 <Node> 6 Core 8769 <Node> 8 Core 8771 <Node> 7 Core 8770 <Redis>
 Session Store !20
  14. Trouble Shooting ↟4FTTJPO*%6OLXPO ↟ 5SBOTQPSUࢸ੿
 ↟ 4XJGU ,PUMJO
 ௏٘ח׮ܰѷ૑݅
 э਷۽૒

    ↟ !21 var transports = ('WebSocket' in window) ? { transports: ['websocket' ] } : { transports: [‘polling'] }; var connectUrl ='http://localhost:8888'; var socket = io.connect(connectUrl, transports);