рдиреЛрдб рдкрд░ рдирд┐рдЬреА рдЪреИрдЯред Js - рдХреНрдпрд╛ рдЖрд╕рд╛рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ?

рдирдорд╕реНрдХрд╛рд░ рджреЛрд╕реНрддреЛрдВ!

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

рддреЛ, рдЪрд▓реЛ рдЖрд╡рд╢реНрдпрдХрддрд╛рдУрдВ рдХреЗ рд╕рд╛рде рд╢реБрд░реВ рдХрд░рддреЗ рд╣реИрдВ:

  1. рдкреНрд░рд╡реЗрд╢ рдлрд╛рд░реНрдо - рд▓рд┐рдВрдЧ рдФрд░ рдЙрдореНрд░ рдХрд╛ рд╕рдВрдХреЗрдд (рджреЛрдиреЛрдВ рдЦреБрдж рдХреЗ рд▓рд┐рдП рдФрд░ рд╡рд╛рд░реНрддрд╛рдХрд╛рд░ рдХреЗ рд▓рд┐рдП);
  2. рдирд┐рдЬреА рдХрдорд░реЗ рдмрдирд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ (рдПрдХ рдЙрдкрдпреБрдХреНрдд рд╡рд╛рд░реНрддрд╛рдХрд╛рд░ рдХреА рдЕрдиреБрдкрд╕реНрдерд┐рддрд┐ рдореЗрдВ);
  3. рдПрдХ рдирд┐рдЬреА рдХрдорд░реЗ рд╕реЗ рдХрдиреЗрдХреНрд╢рди (рдпрджрд┐ рдХреЛрдИ рд╡рд╛рд░реНрддрд╛рдХрд╛рд░ рд╣реИ);
  4. рдЧреБрдордирд╛рдореА (рд╣рдо рдХрд┐рд╕реА рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рдХреЛ рдирд╣реАрдВ рдмрдЪрд╛рдПрдВрдЧреЗ)ред


рд╣рдореЗрдВ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдП?


Node.JS (рд▓реЗрдЦрди рдХреЗ рд╕рдордп - 0.6.14) рдПрдХреНрд╕рдкреНрд░реЗрд╕, рд╕реЙрдХреЗрдЯ.рдЖрдИрдУ рдореЙрдбреНрдпреВрд▓ рдХреЗ рд╕рд╛рдеред рдЗрд╕рдХреЗ рдЕрддрд┐рд░рд┐рдХреНрдд, рдирд┐рдм, рд╕реНрдЯрд╛рдЗрд▓рд╕, рдЖрдИ 18 рдПрди рдФрд░ рдЙрдкрдпреЛрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рддреЛ рдЪрд▓рд┐рдП рдЪрд▓рддреЗ рд╣реИрдВред

рдПрдХ рдирдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ


рдпрд╣рд╛рдВ рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИред рд╣рдо рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЗрдВрдХреНрд░реАрдореЗрдВрдЯ рдХрд╛рдЙрдВрдЯрд░ рдмрдирд╛рддреЗ рд╣реИрдВ, рдХреНрд▓рд╛рдЗрдВрдЯ рдХреА рд╕рдВрдЦреНрдпрд╛ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд╣реИрдВред

var user = {}; var uid = socket.store.id; var room_id = uid + "_room"; online++; total++; socket.broadcast.emit('online', total, free); socket.emit('online', total, free); user.id = socket.store.id; users[socket.store.id] = user; 


рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд▓реЙрдЧрд┐рди


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

  socket.on('nickname', function (nick, m_sex, m_age, c_sex, c_age, fn) { if (nicknames[socket.user_id]) { fn(true); } else { fn(false); nicknames[socket.store.id] = socket.nickname = socket.store.id; socket.user_id = socket.store.id; socket.gender = m_sex; var user = users[socket.store.id]; user.m_sex = m_sex; user.m_age = m_age; user.c_sex = c_sex; user.c_age = c_age; user.active = 0; free++; // Check existing rooms for(var __room in rooms){ if(user.active == 0){ _room = rooms[__room]; if(_room.c_sex == m_sex && _room.c_age == m_age && _room.m_sex == c_sex && _room.m_age == c_age && _room.active == 0){ room_id = _room.id; _room.active = 1; _room.nicknames[socket.user_id] = socket.user_id; user.active = 1 free--; console.log(' room finded! this - ' + room_id); } } } // Create own room if(user.active == 0){ console.log(' no room finded :( create own - ' + room_id); var room = {}; room.id = room_id; room.m_sex = m_sex; room.m_age = m_age; room.c_sex = c_sex; room.c_age = c_age; room.active = 0 room.nicknames = {}; room.nicknames[socket.user_id] = socket.user_id; rooms[room_id] = room; socket.emit("user message", "System", i18n.__("waiting")); } users[socket.store.id] = user; socket.join(room_id); socket.broadcast.to(room_id).emit('announcement', socket.user_id + ' ' + i18n.__('connected')); socket.broadcast.to(room_id).emit('nicknames', rooms[room_id].nicknames); socket.emit('nicknames', rooms[room_id].nicknames); } }); 


рдХреЗрд╡рд▓ рдПрдХ рдЪреАрдЬ рдмрдЪреА рд╣реИ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рд╕рдВрд╡рд╛рдж рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреА рд╣реИред

рд╕рдВрджреЗрд╢ рднреЗрдЬрдирд╛


 socket.on('user message', function (msg) { msg = sanitize(msg).entityEncode(); console.log(' message from ' + socket.user_id + ' to room ' + room_id + ": " + msg); socket.broadcast.to(room_id).emit('user message', socket.gender == 1 ? i18n.__("he") : i18n.__("she") , msg); }); 


рдЦреИрд░, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ ...

рдирд┐рдХрд╛рд╕


 socket.on('disconnect', function () { online--; total--; socket.broadcast.emit('online', total, free); if (!socket.user_id) return; if(free > 0) free--; socket.broadcast.emit('online', total, free); console.log(socket.user_id); socket.leave(room_id); socket.broadcast.to(room_id).emit('announcement', socket.user_id + ' ' + i18n.__('disconnected')); if(rooms[room_id]) delete rooms[room_id].nicknames[socket.user_id]; if(rooms[room_id]) socket.broadcast.to(room_id).emit('nicknames', rooms[room_id].nicknames); delete users[socket.user_id]; delete nicknames[socket.user_id]; delete rooms[room_id]; }); 


рд╡рд╣ рд╕рдм рд╣реИред рдпрд╣ <10 рд▓реЛрдЧреЛрдВ рдХреЗ рднрд╛рд░ рдХреЗ рддрд╣рдд рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рдереА :) рдЕрдЧрд░ рд╕рдореБрджрд╛рдп рдЗрд╕ рддрд░рд╣ рдХреА рдЪреИрдЯ рдХреА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд░реБрдЪрд┐ рд░рдЦрддрд╛ рд╣реИ - рдЖрдЬ рдореИрдВ рдЗрд╕реЗ рдЧреАрдереВрдм рдкрд░ рдкреЛрд╕реНрдЯ рдХрд░реВрдВрдЧрд╛, рдпрд╣ рд╕рд┐рд░реНрдл рдордиреЛрд░рдВрдЬрди рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред

рдкреБрдирд╢реНрдЪ рд╡рд┐рд╖рдп рд▓рдВрдмреЗ рд╕рдордп рддрдХ рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рд╢реБрд░реВ рд╣реБрдЖ, рдФрд░ рдорд╕реМрджрд╛ рдкреНрд░рддрд┐рдпреЛрдВ рд╕реЗ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ - рдЗрд╕рд▓рд┐рдП рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЙрддреНрдкрд╛рджреЛрдВ рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВред

PSS рдЖрдк рдпрд╣рд╛рдВ рд▓рд╛рдЗрд╡ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ - virt.in

рдпреБрдкреАрдбреАред рд╡рд╛рджрд╛ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╕реНрд░реЛрдд рдХреЛрдб рдпрд╣рд╛рдБ рд╣реИ - github.com/eudj1n/virtin

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


All Articles