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

WebSocket, Socket.io

Teddy
August 07, 2018

WebSocket, Socket.io

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);