Node.js + рд╕реЙрдХреЗрдЯ.io рдкрд░ рдПрдХ рджрд┐рди рдореЗрдВ рдЧреЗрдо рд╕рд░реНрд╡рд░

рд╢реБрдХреНрд░рд╡рд╛рд░ рдХреЛ рдХрд╛рд░реНрдп рджрд┐рд╡рд╕ рдХреЗ рдЕрдВрдд рдореЗрдВ, рд╡рд░реНрддрдорд╛рди рдХрд╛рд░реНрдп рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реБрдП, рдореЗрд░реЗ рджрд┐рдорд╛рдЧ рдореЗрдВ рдЕрдЪрд╛рдирдХ рдПрдХ рд╡рд┐рдЪрд╛рд░ рдЖрдпрд╛ - рдХреНрдпрд╛ рдореБрдЭреЗ рдЕрдкрдирд╛ рдЧреЗрдо рд╕рд░реНрд╡рд░ рд▓рд┐рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП?

рдореЗрд░реЗ рджрд┐рдорд╛рдЧ рдореЗрдВ, рдЪрд┐рддреНрд░реЛрдВ рдиреЗ рдПрдХ рд╕реЗ рдмрдврд╝рдХрд░ рдПрдХ рд╕реБрдВрджрд░, рднрд╡рд┐рд╖реНрдп рдХреЗ рдЦреЗрд▓ рдХреЗ рдпрд╛рдВрддреНрд░рд┐рдХреА, рд╡рд┐рд╢реЗрд╖ рдкреНрд░рднрд╛рд╡реЛрдВ рдХрд╛ рдЖрд╡рд┐рд╖реНрдХрд╛рд░ рдХрд┐рдпрд╛ред рдЦреЗрд▓ рдореЗрд░реЗ рд╕рд┐рд░ рдореЗрдВ рд▓рдЧрднрдЧ рддреИрдпрд╛рд░ рдерд╛, рдХреБрдЫ рднреА рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдмрдЪрд╛ рдерд╛, рдПрдХ рдЕрд╡рдзрд╛рд░рдгрд╛ рддреИрдпрд╛рд░ рдХрд░реЗрдВ, рдПрдХ рдбрд┐рдЬрд╝рд╛рдЗрди рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкрд░ рдХрд╛рдо рд╢реБрд░реВ рдХрд░реЗрдВ, рдХрд▓рд╛рдХрд╛рд░реЛрдВ, рдкрдЯрдХрдерд╛ рд▓реЗрдЦрдХреЛрдВ, рд╕рд╛рдЙрдВрдб рдЗрдВрдЬреАрдирд┐рдпрд░, рдкреНрд░реЛрдЧреНрд░рд╛рдорд░ рдХреЛ рдвреВрдВрдвреЗрдВ ... рджреБрдЦ рдХреА рдмрд╛рдд рд╣реИ, рдПрдХ рдмрд╛рд░ рдлрд┐рд░ рд╕реЗ рд╡рд┐рдЪрд╛рд░ рдХреЛ рдПрдХ рдбрдВрдк рдкрд░ рднреЗрдЬ рджрд┐рдпрд╛ред

рд▓реЗрдХрд┐рди, рдЬрд╛рд╣рд┐рд░рд╛ рддреМрд░ рдкрд░, рдХрд┐рд░рдЪ рдореЗрд░реЗ рд╕рд┐рд░ рдореЗрдВ рдордЬрдмреВрддреА рд╕реЗ рдЕрдЯрдХ рдЬрд╛рддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬрдм рдореИрдВ рд╢рдирд┐рд╡рд╛рд░ рдХреЛ рдЙрдард╛ рддреЛ рдореИрдВрдиреЗ рдмрдирд╛рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореБрдЭреЗ рдЕрдкрдиреА рдпреЛрдЬрдирд╛ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рдирд┐рд░реНрдгрд╛рдпрдХ рд░реВрдк рд╕реЗ рдХрд╣рд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдХреЛрдИ рдЕрдиреБрднрд╡ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдРрд╕реА рддрдХрдиреАрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рдореЗрд░реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реИрдВ, рдЬреИрд╕реЗ рдХрд┐ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП java.nio рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП cocos2d, рдирд┐рдореНрди рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХреА рд╕реНрдЯреИрдХ рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛: javascript / nt .js + socket.io + html рдХреИрдирд╡рд╛рд╕ред

рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдпреЗ рд╕рднреА рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпрд╛рдВ рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рдЬрд┐рдЬреНрдЮрд╛рд╕рд╛ рд╣реИрдВ, рдореЗрд░реЗ рд╡рд┐рдЪрд╛рд░ рдореЗрдВ рдирд┐рд░рд╛рд╢рд╛рд╡рд╛рджреА, рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ, рдереЛрдбрд╝рд╛ рдЦреЗрд▓рддреЗ рд╣реИрдВ, рд╕рднреА рд╕рдорд╛рди рд╣реИрдВ, рдХреБрдЫ рднреА рдЬрд▓реНрджреА рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред

рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП, рдиреЛрдб.рдЬреЗрдПрд╕ рдХреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЦрд╕рдЦрд╕ тАЛтАЛрдкрд░ рдЗрд╕реЗ рдмрдВрджрд░рдЧрд╛рд╣реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХрд╛рдлреА рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛:
рд╕реВрдбреЛ рдкреЛрд░реНрдЯ рдиреЛрдбрдЬ рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВ
рд╕реБрдбреЛ рдкреЛрд░реНрдЯ рдПрдирдкреАрдПрдо рд╕реНрдерд╛рдкрд┐рдд рдХрд░реЗрдВ
npm рд╕реНрдерд╛рдкрд┐рдд socket.io

рдЗрд╕ рдкрд░ рддреИрдпрд╛рд░реА рдкреВрд░реА рд╣реЛ рдЧрдИред

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

рдпрд╣рд╛рдБ рдХреЛрдб рд╣реИ:

рд╕рд░реНрд╡рд░
var io = require('socket.io').listen(80); io.sockets.on('connection', function (socket) { socket.on('message', function () { }); socket.on('disconnect', function () { }); }); 

рдЧреНрд░рд╛рд╣рдХ
 <script> var socket = io.connect('http://localhost/'); socket.on('connect', function () { socket.send('hi'); socket.on('message', function (msg) { // my msg }); }); </script> 


рдЬреЛ рдореИрдВрдиреЗ рдмреЗрд╢рд░реНрдореА рд╕реЗ рдпрд╣рд╛рдВ рд╕реЗ рд╕реЙрдХреЗрдЯ.рдЖрдИрдУ /#how-to-use рд▓реЗ рд▓рд┐рдпрд╛

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдХреЛрдб рдЬрд▓реНрджреА рдмрджрд▓ рдЧрдпрд╛:

рдЧреНрд░рд╛рд╣рдХ
 var URL = 'http://localhost:9090'; var Network = function(url) { this.url = url; this.pingTime = 0; this.actorId = 0; this.sendingPing = false; } Network.prototype.ping = function() { if(this.sendingPing) { return; } this.sendingPing = true; this.startDate = new Date(); this.socket.send("hi"); } Network.prototype.start = function(game) { var socket = io.connect(this.url); this.socket = socket; socket.on('connect', function () { socket.on('message', function () { var now = new Date(); network.pingTime = (now.getTime()-network.startDate.getTime()); network.sendingPing = false; }); socket.on('actorId', function (id) { network.actorId = id; }); socket.on('gameInfo', function (msg) { game.networkUpdate(msg); }); network.ping(); game.active = true; }); socket.on('disconnect', function () { network.start(game); }); } Network.prototype.update = function() { this.ping(); } Network.prototype.sendInput = function(pos) { this.socket.emit('input', pos); } var network = new Network(URL); network.start(game); 


рд╕рд░реНрд╡рд░
 var io = require('socket.io').listen(9090); var clients = []; io.sockets.on('connection', function (socket) { var client = new Client(socket); clients.push(client); game.active = clients.length != 0; socket.on('message', function (msg) { client.onMessage(msg); }); socket.on('input', function (pos) { client.onInput(pos); }); socket.on('disconnect', function () { var index = clients.indexOf(client); if(index != -1) { clients.splice(index); } game.active = clients.length != 0; client.onDisconnect(); }); }); console.log("Server started.."); setInterval(function() { if(!game.active) { return; } game.update(TICK_TIME); var gameInfo = game.gameInfo(); for(var i=0;i<clients.length;i++) { var client = clients[i]; client.update(gameInfo); } }, TICK_TIME); 


рдбрд┐рдо рдПрдХ рдЕрднрд┐рдиреЗрддрд╛ (рд╣рд░рд╛) рдХреЗ рдкреНрд░рдмрдВрдзрди рдХреЗ рд▓рд┐рдП рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдЬрдм рдЖрдк рдХреИрдирд╡рд╛рд╕ рдореЗрдВ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реНрдерд╛рди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЕрднрд┐рдиреЗрддрд╛ рд╡рд╣рд╛рдВ рдЯреЗрд▓реАрдкреЛрд░реНрдЯ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЕрдкрдиреА рджрд┐рд╢рд╛ рдФрд░ рдЧрддрд┐ рдХреЛ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рд▓реЛрдЧреЛрдВ рдореЗрдВ рдмрджрд▓рддрд╛ рд╣реИред

рдЧреЗрдо рд▓реВрдк рдЧреЗрдо рдХреНрд▓рд╛рд╕ рдореЗрдВ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЧрдпрд╛, рдПрдХреНрдЯрд░ рдХреНрд▓рд╛рд╕ рдореЗрдВ рд╡реНрдпрд╡рд╣рд╛рд░ред рд╕рднреА рддрд░реНрдХ рд╕рд░реНрд╡рд░ рдкрд░ рдЧрдгрдирд╛ рдХрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рд╡рд╛рдВрдЫрд┐рдд рдирд┐рд░реНрджреЗрд╢рд╛рдВрдХ рдореЗрдВ рд╣рд▓рдХреЛрдВ (рд╣рдорд╛рд░реЗ рдЕрднрд┐рдиреЗрддрд╛рдУрдВ рдХреЗ) рдХреЛ рдЦреАрдВрдЪрддреЗ рд╣реИрдВред рдПрдХ рд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рднреМрддрд┐рдХ рдореЙрдбрд▓ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдЗрд╕ рдкреНрд░рдпреЛрдЧ рдХрд╛ рд▓рдХреНрд╖реНрдп рдирд╣реАрдВ рдерд╛, рдЗрд╕рд▓рд┐рдП рдореБрдЭреЗ рдмрд╕ рджреАрд╡рд╛рд░реЛрдВ рд╕реЗ рдЧреЗрдВрджреЛрдВ рдХреЗ "рдкрд▓рдЯрд╛рд╡" рдХрд╛ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╕рдм рдХреБрдЫ рдмрд╣реБрдд рд╕рд░рд▓ рдирд┐рдХрд▓рд╛, рдЖрд╢реНрдЪрд░реНрдп рдХреЗ рд╕рд╛рде рд╕рд░реНрд╡рд░ рдкрд░ рдХреЛрдб рдЕрдкрд▓реЛрдб рдХрд░рдиреЗ рд╕реЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рд╕рдм рдХреБрдЫ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рдерд╛ рдФрд░ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рд░реВрдк рд╕реЗ рд╕реБрдЪрд╛рд░реВ рд░реВрдк рд╕реЗред

рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВ рд╕рд░реНрд╡рд░ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рдЧреЗрдо рдФрд░ рдПрдХреНрдЯрд░ рдмреЗрд╕ рдХреНрд▓рд╛рд╕ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛, рд▓реЗрдХрд┐рди рдЦреБрдж рдХреЛ рдФрд░ рд▓реЛрдЧреЛрдВ рдХреЛ рдмреЗрд╡рдХреВрдл рдмрдирд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдФрд░ рд╕рд░реНрд╡рд░ рдХреЗ рд▓рд┐рдП рджреЛ рдмрд╛рд░ рдХреЛрдб рд▓рд┐рдЦрд╛ред

рдирддреАрдЬрддрди, рдореИрдВ рдЙрди рдкреНрд░реМрджреНрдпреЛрдЧрд┐рдХрд┐рдпреЛрдВ рд╕реЗ рдорд┐рд▓рд╛, рдЬреЛ рдЕрдм рддрдХ рдореЗрд░реЗ рд▓рд┐рдП рдЕрдкрд░рд┐рдЪрд┐рдд рдереАрдВ, рдореБрдЭреЗ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдорд╣рд╕реВрд╕ рд╣реБрдЖ рдХрд┐ рд╕рднреА рд╕рдорд╛рди рддрдХрдиреАрдХ рдЕрднреА рднреА рдЦрдбрд╝реА рдирд╣реАрдВ рд╣реИ рдФрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдиреЛрдб.рдЬреЗрдПрд╕ рдордВрдЪ рдЗрд╕ рдкрд░ рдПрдХ рдХрд░реАрдм рд╕реЗ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдпреЛрдЧреНрдп рд╣реИред

рдореИрдВрдиреЗ рддрдирд╛рд╡ рдкрд░реАрдХреНрд╖рдг рдирд╣реАрдВ рдХрд┐рдпрд╛, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдирд╣реАрдВ рдХрд╣ рд╕рдХрддрд╛ред рд╡реНрдпрдХреНрддрд┐рдкрд░рдХ рднрд╛рд╡рдирд╛рдУрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдпрд╣ "рдмрд╣реБрдд рдирд╣реАрдВ" рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рд▓реЗрдХрд┐рди рдореИрдВ рдЕрднреА рддрдХ рдкреБрд╖реНрдЯрд┐ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

рдЬреЛ рд▓реЛрдЧ рдкреНрд░рдпрд╛рд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЙрдирдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рд▓рд┐рдВрдХ рд╣реИ (рд╕рдмрд╕реЗ рддреЗрдЬрд╝ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдХрд╛ рдЙрдкрдпреЛрдЧ рд╕рд░реНрд╡рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреБрдЫ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ)ред
рдпрджрд┐ рдХрд┐рд╕реА рдХреЛ рд╕реНрд░реЛрдд рдХреЛрдб рд╕реЗ рдкрд░рд┐рдЪрд┐рдд рд╣реЛрдиреЗ рдХреА рдЗрдЪреНрдЫрд╛ рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ рдпрд╣рд╛рдВ рдЖрдПрдВ ред

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


All Articles