рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рдореИрдВ рдпрд╣ рджрд┐рдЦрд╛рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдВрдЧрд╛ рдХрд┐ рдЖрдк
рд╕реЙрдХреЗрдЯ рдХреЗ рд╕рд╛рде рд╕рдВрдпреЛрдЬрди рдореЗрдВ Node.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╕рд░рд▓ рдЪреИрдЯ рдХреИрд╕реЗ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдкреНрд░рд╛рд░рдВрдн рдореЗрдВ, рдореИрдВ рд╢реБрджреНрдз рд╡реЗрдмрд╕реНрдХреИрдЯ рдкрд░ рдПрдХ рдЪреИрдЯ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдЗрдВрдЯрд░рдиреЗрдЯ рдкрд░ рдЙрдирдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╕рд░реНрд╡рд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреА рд▓рдЧрднрдЧ рдкреВрд░реА рдХрдореА рдереАред рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдкрд╣рд┐рдпрд╛ рдХреЛ рд╕реБрджреГрдврд╝ рдирд╣реАрдВ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рд▓реЗрдХрд┐рди рдПрдХ рддреИрдпрд╛рд░ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╕рд░реНрд╡рд░ рдЙрдмрдВрдЯреВ рдХреЗ рддрд╣рдд рдЪрд▓рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рднреА рдЙрджрд╛рд╣рд░рдг рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣реЛрдВрдЧреЗ (рдФрд░ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рд▓рд┐рдВрдХ рдЗрд╕рдХреЗ рд▓рд┐рдП рд╣реЛрдВрдЧреЗ)ред
рдШрдЯрдХ рд╕реНрдерд╛рдкрдирд╛
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рд╕реНрд╡рдпрдВ Node.js (рд╕реНрдерд╛рдкрдирд╛ рдирд┐рд░реНрджреЗрд╢ рдФрд░ рдбрд╛рдЙрдирд▓реЛрдб рд▓рд┐рдВрдХ
рдпрд╣рд╛рдВ ) рдФрд░ Socket.IO рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред Npm.js рдХреЗ рд▓рд┐рдП рдореЙрдбреНрдпреВрд▓ npm рдкреНрд░рдмрдВрдзрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдирд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рд╣реИ -
curl http://npmjs.org/install.sh | sh npm install socket.io
рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб
рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб рдХреА рд╕рдВрд░рдЪрдирд╛ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ: рд╕рд░реНрд╡рд░ рдПрдХ рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдЕрдЧрд░ рдпрд╣ рдПрдХ рдХрдорд╛рдВрдб рд╣реИ, рддреЛ рдпрд╣ рдХреБрдЫ рдХреНрд░рд┐рдпрд╛рдПрдВ рдХрд░рддрд╛ рд╣реИ, рдЕрдЧрд░ рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рд╕рдВрджреЗрд╢ рд╣реИ, рддреЛ рдпрд╣ рдЕрдиреНрдп рд╕рднреА рдкреНрд░рддрд┐рднрд╛рдЧрд┐рдпреЛрдВ рдХреЛ рднреЗрдЬрддрд╛ рд╣реИред
рдЗрд╕ рдХреЛрдб рдореЗрдВ (рдФрд░ рдереЛрдбрд╝рд╛ рдФрд░):
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
рдЕрдВрдд рдореЗрдВ, рд╣рдо рдлрд╝рд╛рдЗрд▓ рдФрд░ рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ рд▓реЙрдЧ рдХреЗ рд╕рд╛рде рд╕рд░реНрд╡рд░ рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ -
node server.js > output.log &
(рдпрд╣ рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рд╣реИ рдХрд┐ рдореЗрд░реА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗрд╡рд▓ рдЙрд╕ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рд╕реЗ рд▓реЙрдиреНрдЪ рдХреА рдЧрдИ рдереА рдЬрд╣рд╛рдБ рдиреЛрдбред js рд╕реНрдерд╛рдкрд┐рдд рдерд╛)
рд╕рднреА рд╕реНрд░реЛрддреЛрдВ рдХреЛ
рдпрд╣рд╛рдВ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ ред рдореИрдВ рддреБрд░рдВрдд рдХрд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдореИрдВ рдПрдХ рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рдЧреБрд░реБ рдирд╣реАрдВ рд╣реВрдВ рдФрд░ рдореИрдВрдиреЗ рдЕрдкрдиреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЖрдкрд╕реЗ рдЕрдирд╛рдбрд╝реАрдкрди рдХреА рдХрд╕рдо рдирд╣реАрдВ рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддрд╛ рд╣реВрдВ (рдФрд░ рдпрд╣ рдмреЗрдХрд╛рд░ рд╣реИ)ред рдХреНрдпреЛрдВрдХрд┐ рдЬрдмрдХрд┐ Apache рд╕реНрдереИрддрд┐рдХ рджреЗрддрд╛ рд╣реИ, рдЗрд╕реЗ рдЖрдкрдХреЗ рдХрдВрдкреНрдпреВрдЯрд░ рдкрд░ рдЪрд▓рд╛рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреА рдЬрд╛рддреА рд╣реИред рдпрджрд┐ рдЖрд▓рд╕реНрдп рдпрд╛ рдЕрд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ / рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ - рддреЛ рдПрдХ рдЬреАрд╡рдВрдд рдЙрджрд╛рд╣рд░рдг
рдпрд╣рд╛рдВ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛
рд╣реИ ред
рдХреЛрдб рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдУрдкреЗрд░рд╛ 11+, рдлрд╝рд╛рдпрд░рдлрд╝реЙрдХреНрд╕ 5+, рдХреНрд░реЛрдо 12+ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рд▓реЙрдЧ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП, IE9 рдкреИрдХреЗрдЯ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ, рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ рдФрд░ рднреЗрдЬрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред
рдкреНрд░рдпреБрдХреНрдд рд╕рд╛рдордЧреНрд░реА:
socket.io/#how-to-usegithub.com/LearnBoost/Socket.IO/wiki/Migrating-0.6-to-0.7google.comрдЕрдЧрд▓реЗ рдЕрдВрдХ рдореЗрдВ: рд╣рдо рд╕рдВрджреЗрд╢ рдЗрддрд┐рд╣рд╛рд╕ рдХреЛ рджрд░реНрдЬ рдХрд░рддреЗ рд╣реИрдВ, рдЕрдкрдирд╛ рдирд╛рдо рдмрджрд▓рддреЗ рд╣реИрдВ, рдирд┐рдЬреА рд░реВрдк рд╕реЗ рдХрд┐рд╕реА рдЕрдиреНрдп рдЦрд┐рд▓рд╛рдбрд╝реА рдХреЛ рд▓рд┐рдЦрддреЗ рд╣реИрдВ, рдФрд░ рдмрд╣реБрдд рдХреБрдЫ!