Node.js рдФрд░ Socket.IO рдкрд░ рдПрдХ рдЪреИрдЯ рдмрдирд╛рдПрдВ

рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдЖрдк рд╕реЙрдХреЗрдЯ рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдореЗрдВ Node.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕рд░рд▓ рдЪреИрдЯ рдХреИрд╕реЗ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдореИрдВ рд╢реБрджреНрдз рд╡реЗрдмрд╕реНрдХреИрдЯ рдкрд░ рдПрдХ рдЪреИрдЯ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдЙрдирдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╕рд░реНрд╡рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рд▓рдЧрднрдЧ рдкреВрд░реА рдХрдореА рдереАред рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдкрд╣рд┐рдпрд╛ рдХреЛ рд╕реБрджреГрдврд╝ рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдПрдХ рддреИрдпрд╛рд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рд░реНрд╡рд░ рдЙрдмрдВрдЯреВ рдХреЗ рддрд╣рдд рдЪрд▓рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рднреА рдЙрджрд╛рд╣рд░рдг рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣реЛрдВрдЧреЗ (рдФрд░ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рд▓рд┐рдВрдХ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣реЛрдВрдЧреЗ)ред

рдШрдЯрдХ рд╕реНрдерд╛рдкрдирд╛

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рд╕реНрд╡рдпрдВ Node.js (рд╕реНрдерд╛рдкрдирд╛ рдирд┐рд░реНрджреЗрд╢ рдФрд░ рдбрд╛рдЙрдирд▓реЛрдб рд▓рд┐рдВрдХ рдпрд╣рд╛рдВ ) рдФрд░ Socket.IO рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред Npm.js рдХреЗ рд▓рд┐рдП рдореЙрдбреНрдпреВрд▓ npm рдкреНрд░рдмрдВрдзрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рд╣реИ -
curl http://npmjs.org/install.sh | sh npm install socket.io 

рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб

рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдХреА рд╕рдВрд░рдЪрдирд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ: рд╕рд░реНрд╡рд░ рдПрдХ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдЕрдЧрд░ рдпрд╣ рдПрдХ рдХрдорд╛рдВрдб рд╣реИ, рддреЛ рдпрд╣ рдХреБрдЫ рдХреНрд░рд┐рдпрд╛рдПрдВ рдХрд░рддрд╛ рд╣реИ, рдЕрдЧрд░ рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рд╕рдВрджреЗрд╢ рд╣реИ, рддреЛ рдпрд╣ рдЕрдиреНрдп рд╕рднреА рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреЛ рднреЗрдЬрддрд╛ рд╣реИред
 //       8080- - 80    http- var io = require('socket.io').listen(8080); //     -   production' io.set('log level', 1); //       io.sockets.on('connection', function (socket) { // ..   -       5   ID  var ID = (socket.id).toString().substr(0, 5); var time = (new Date).toLocaleTimeString(); //     ,        socket.json.send({'event': 'connected', 'name': ID, 'time': time}); //    ,        socket.broadcast.json.send({'event': 'userJoined', 'name': ID, 'time': time}); //      socket.on('message', function (msg) { var time = (new Date).toLocaleTimeString(); //  ,        socket.json.send({'event': 'messageSent', 'name': ID, 'text': msg, 'time': time}); //      socket.broadcast.json.send({'event': 'messageReceived', 'name': ID, 'text': msg, 'time': time}) }); //    -   socket.on('disconnect', function() { var time = (new Date).toLocaleTimeString(); io.sockets.json.send({'event': 'userSplit', 'name': ID, 'time': time}); }); }); 

рдЗрд╕ рдХреЛрдб рдореЗрдВ (рдФрд░ рдереЛрдбрд╝рд╛ рдФрд░):
io.sockets - рд╕рднреА рдЬреБрдбрд╝реЗ рд╣реБрдП рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ
io.sockets.sockets [рдЖрдИрдбреА] - рдЖрдИрдбреА рдЖрдИрдбреА рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЧреНрд░рд╛рд╣рдХ рдХрд╛ рдЪрдпрди
рд╕реЙрдХреЗрдЯ - "рд╡рд░реНрддрдорд╛рди" рдХреНрд▓рд╛рдЗрдВрдЯ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ
socket.send (рдкрд╛рда) - "рдореВрд▓" рдШрдЯрдирд╛, рдПрдХ рдкрд╛рда рд╕рдВрджреЗрд╢ рднреЗрдЬ рд░рд╣рд╛ рд╣реИ
socket.json.send ({}) - JSON рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдПрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬ рд░рд╣рд╛ рд╣реИ
socket.broadcast.send - рд╡рд░реНрддрдорд╛рди рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╕рднреА рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдПрдХ рд╕рдВрджреЗрд╢ рднреЗрдЬреЗрдВ
socket.emit (EVENT, JSON) - JSON рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдХрд╕реНрдЯрдо EVENT рдИрд╡реЗрдВрдЯ рднреЗрдЬрдирд╛ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, socket.emit ('whereami', {'location': loc})) рдХрд╛ рдЙрдкрдпреЛрдЧ рдорд╛рдирдХ рдШрдЯрдирд╛рдУрдВ рдХреЛ 'рдХрдиреЗрдХреНрдЯреЗрдб', 'рдореИрд╕реЗрдЬ' рдХреЛ рдлрд┐рд░ рд╕реЗ рд▓рд┐рдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдФрд░ 'рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ' рдХрд░реЗрдВред
socket.on (EVENT, CALLBACK) - EVENT рдШрдЯрдирд╛ рд╣реЛрдиреЗ рдкрд░ CALLBACK рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, socket.on ('whereami', function (loc) {рдХрдВрд╕реЛрд▓.рд▓реЙрдЧ ('I + m in' + loc + '!)) ;}))
рдореИрдВ JSON рдореЗрдВ рдЧреНрд░рд╛рд╣рдХреЛрдВ рдХреЛ рд╕рдВрджреЗрд╢ рднреЗрдЬрддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рд╕рдВрджреЗрд╢ рдкрд╛рда рд╕реНрд╡рдпрдВ рдХреНрд▓рд╛рдЗрдВрдЯ рдореЗрдВ рдЙрддреНрдкрдиреНрди рд╣реЛрддрд╛ рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдбреЗрдЯрд╛ рдХреА рдкреНрд░рд╕реНрддреБрддрд┐ рд╕рд░реНрд╡рд░ рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рдХрд░рддреА рд╣реИ рдФрд░ рдЗрд╕реЗ рдЫреВрдиреЗ рдХреЗ рдмрд┐рдирд╛ рдЗрд╕реЗ рдмрджрд▓рдирд╛ рдЖрд╕рд╛рди рд╣реИ (рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рднрд╛рд╖рд╛ рдХреЛ рдмрджрд▓рдирд╛); рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рд╕рд░реНрд╡рд░ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рдмреАрдЪ рдереЛрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЧреНрд░рд╛рд╣рдХ рднрд╛рдЧ

HTML рдФрд░ CSS

index.html:
 <!doctype html> <html> <head> <meta charset="utf-8"> <title></title> <link href="style.css" rel="stylesheet"> <script src="http://46.182.31.65:8080/socket.io/socket.io.js"></script> <script src="client.js"></script> </head> <body> <div id="log"></div><br> <input type="text" id="input" autofocus><input type="submit" id="send" value="Send"> </body> </html> 

style.css
 #log { width: 590px; height: 290px; border: 1px solid rgb(192, 192, 192); padding: 5px; margin-bottom: 5px; font: 11pt 'Palatino Linotype'; overflow: auto; } #input { width: 550px; } #send { width: 50px; } .in { color: rgb(0, 0, 0); } .out { color: rgb(0, 0, 0); } .time { color: rgb(144, 144, 144); font: 10pt 'Courier New'; } .system { color: rgb(165, 42, 42); } .user { color: rgb(25, 25, 112); } 

рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ

socket.io.js рдХреЛ рдиреЛрдб рдиреЛрдбреНрд╕ рдХреЛ рд╕реНрд╡рддрдГ рд╣реА рдиреЛрдбрдЬреЗрд╕рдкреАрдкреА [: port] /socket.io/socket.io.js рдкрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ - рдФрд░ рдХреБрдЫ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
client.js
 //      strings = { 'connected': '[sys][time]%time%[/time]:       [user]%name%[/user].[/sys]', 'userJoined': '[sys][time]%time%[/time]:  [user]%name%[/user]   .[/sys]', 'messageSent': '[out][time]%time%[/time]: [user]%name%[/user]: %text%[/out]', 'messageReceived': '[in][time]%time%[/time]: [user]%name%[/user]: %text%[/in]', 'userSplit': '[sys][time]%time%[/time]:  [user]%name%[/user]  .[/sys]' }; window.onload = function() { //    ; websockets -    ,  xhr if (navigator.userAgent.toLowerCase().indexOf('chrome') != -1) { socket = io.connect('http://46.182.31.65:8080', {'transports': ['xhr-polling']}); } else { socket = io.connect('http://46.182.31.65:8080'); } socket.on('connect', function () { socket.on('message', function (msg) { //    ,  ,      document.querySelector('#log').innerHTML += strings[msg.event].replace(/\[([az]+)\]/g, '<span class="$1">').replace(/\[\/[az]+\]/g, '</span>').replace(/\%time\%/, msg.time).replace(/\%name\%/, msg.name).replace(/\%text\%/, unescape(msg.text).replace('<', '&lt;').replace('>', '&gt;')) + '<br>'; //     document.querySelector('#log').scrollTop = document.querySelector('#log').scrollHeight; }); //   <Enter>     document.querySelector('#input').onkeypress = function(e) { if (e.which == '13') { //   input',   escape- socket.send(escape(document.querySelector('#input').value)); //  input document.querySelector('#input').value = ''; } }; document.querySelector('#send').onclick = function() { socket.send(escape(document.querySelector('#input').value)); document.querySelector('#input').value = ''; }; }); }; 


рдЕрдВрдд рдореЗрдВ, рд╣рдо рдлрд╝рд╛рдЗрд▓ рдФрд░ рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рд▓реЙрдЧ рдХреЗ рд╕рд╛рде рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ -
 node server.js > output.log & 

(рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдореЗрд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗрд╡рд▓ рдЙрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗ рд▓реЙрдиреНрдЪ рдХреА рдЧрдИ рдереА рдЬрд╣рд╛рдБ рдиреЛрдбред js рд╕реНрдерд╛рдкрд┐рдд рдерд╛)

рд╕рднреА рд╕реНрд░реЛрддреЛрдВ рдХреЛ рдпрд╣рд╛рдВ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред рдореИрдВ рддреБрд░рдВрдд рдХрд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЧреБрд░реБ рдирд╣реАрдВ рд╣реВрдВ рдФрд░ рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЖрдкрд╕реЗ рдЕрдирд╛рдбрд╝реАрдкрди рдХреА рдХрд╕рдо рдирд╣реАрдВ рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реВрдВ (рдФрд░ рдпрд╣ рдмреЗрдХрд╛рд░ рд╣реИ)ред рдХреНрдпреЛрдВрдХрд┐ рдЬрдмрдХрд┐ Apache рд╕реНрдереИрддрд┐рдХ рджреЗрддрд╛ рд╣реИ, рдЗрд╕реЗ рдЖрдкрдХреЗ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдЪрд▓рд╛рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреА рдЬрд╛рддреА рд╣реИред рдпрджрд┐ рдЖрд▓рд╕реНрдп рдпрд╛ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ / рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ - рддреЛ рдПрдХ рдЬреАрд╡рдВрдд рдЙрджрд╛рд╣рд░рдг рдпрд╣рд╛рдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ ред

рдХреЛрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдУрдкреЗрд░рд╛ 11+, рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ 5+, рдХреНрд░реЛрдо 12+ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд▓реЙрдЧ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, IE9 рдкреИрдХреЗрдЯ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рднреЗрдЬрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рдкреНрд░рдпреБрдХреНрдд рд╕рд╛рдордЧреНрд░реА:
socket.io/#how-to-use
github.com/LearnBoost/Socket.IO/wiki/Migrating-0.6-to-0.7
google.com

рдЕрдЧрд▓реЗ рдЕрдВрдХ рдореЗрдВ: рд╣рдо рд╕рдВрджреЗрд╢ рдЗрддрд┐рд╣рд╛рд╕ рдХреЛ рджрд░реНрдЬ рдХрд░рддреЗ рд╣реИрдВ, рдЕрдкрдирд╛ рдирд╛рдо рдмрджрд▓рддреЗ рд╣реИрдВ, рдирд┐рдЬреА рд░реВрдк рд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЛ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдФрд░ рдмрд╣реБрдд рдХреБрдЫ!

Source: https://habr.com/ru/post/In127525/


All Articles