рдореИрдВ рд╕рд┐рд░реНрдл `├мo.sockets.emit('hey', data) рдХреЛ рдХреЙрд▓ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ; and it will crash with
RangeError: рдЕрдзрд┐рдХрддрдо рдХреЙрд▓ рд╕реНрдЯреИрдХ рдЖрдХрд╛рд░ . I use it in other places in my app and it works fine. I am not repeating this (checked with console). The logs say the error is in
socket.io/node_modules/has-binary-data/index.js:46``ред
рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХрд╣рд╛рдВ рд╣реИред рдореИрдВрдиреЗ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рд╕реЗ рдареАрдХ рдкрд╣рд▓реЗ io.sockets
рд▓реЙрдЧрд┐рдВрдЧ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдФрд░ рдпрд╣ рдЗрд╕реЗ рдЖрдЙрдЯрдкреБрдЯ рдХрд░рддрд╛ рд╣реИ:
{ name: '/',
17:39:37 web.1 | server:
17:39:37 web.1 | { nsps: { '/': [Circular] },
17:39:37 web.1 | _path: '/socket.io',
17:39:37 web.1 | _serveClient: true,
17:39:37 web.1 | _adapter: [Function: Adapter],
17:39:37 web.1 | _origins: '*:*',
17:39:37 web.1 | sockets: [Circular],
17:39:37 web.1 | eio:
17:39:37 web.1 | { clients: [Object],
17:39:37 web.1 | clientsCount: 2,
17:39:37 web.1 | pingTimeout: 60000,
17:39:37 web.1 | pingInterval: 25000,
17:39:37 web.1 | upgradeTimeout: 10000,
17:39:37 web.1 | maxHttpBufferSize: 100000000,
17:39:37 web.1 | transports: [Object],
17:39:37 web.1 | allowUpgrades: true,
17:39:37 web.1 | allowRequest: [Function],
17:39:37 web.1 | cookie: 'io',
17:39:37 web.1 | ws: [Object],
17:39:37 web.1 | _events: [Object] },
17:39:37 web.1 | engine:
17:39:37 web.1 | { clients: [Object],
17:39:37 web.1 | clientsCount: 2,
17:39:37 web.1 | pingTimeout: 60000,
17:39:37 web.1 | pingInterval: 25000,
17:39:37 web.1 | upgradeTimeout: 10000,
17:39:37 web.1 | maxHttpBufferSize: 100000000,
17:39:37 web.1 | transports: [Object],
17:39:37 web.1 | allowUpgrades: true,
17:39:37 web.1 | allowRequest: [Function],
17:39:37 web.1 | cookie: 'io',
17:39:37 web.1 | ws: [Object],
17:39:37 web.1 | _events: [Object] } },
17:39:37 web.1 | sockets:
17:39:37 web.1 | [ { nsp: [Circular],
17:39:37 web.1 | server: [Object],
17:39:37 web.1 | adapter: [Object],
17:39:37 web.1 | id: 'RfgXeMgHeP_9SQC5AAAC',
17:39:37 web.1 | client: [Object],
17:39:37 web.1 | conn: [Object],
17:39:37 web.1 | rooms: [Object],
17:39:37 web.1 | acks: {},
17:39:37 web.1 | connected: true,
17:39:37 web.1 | disconnected: false,
17:39:37 web.1 | handshake: [Object],
17:39:37 web.1 | _events: [Object] },
17:39:37 web.1 | { nsp: [Circular],
17:39:37 web.1 | server: [Object],
17:39:37 web.1 | adapter: [Object],
17:39:37 web.1 | id: '7TEjGJjWzxObulClAAAD',
17:39:37 web.1 | client: [Object],
17:39:37 web.1 | conn: [Object],
17:39:37 web.1 | rooms: [Object],
17:39:37 web.1 | acks: {},
17:39:37 web.1 | connected: true,
17:39:37 web.1 | disconnected: false,
17:39:37 web.1 | handshake: [Object],
17:39:37 web.1 | _events: [Object] } ],
17:39:37 web.1 | connected:
17:39:37 web.1 | { RfgXeMgHeP_9SQC5AAAC:
17:39:37 web.1 | { nsp: [Circular],
17:39:37 web.1 | server: [Object],
17:39:37 web.1 | adapter: [Object],
17:39:37 web.1 | id: 'RfgXeMgHeP_9SQC5AAAC',
17:39:37 web.1 | client: [Object],
17:39:37 web.1 | conn: [Object],
17:39:37 web.1 | rooms: [Object],
17:39:37 web.1 | acks: {},
17:39:37 web.1 | connected: true,
17:39:37 web.1 | disconnected: false,
17:39:37 web.1 | handshake: [Object],
17:39:37 web.1 | _events: [Object] },
17:39:37 web.1 | '7TEjGJjWzxObulClAAAD':
17:39:37 web.1 | { nsp: [Circular],
17:39:37 web.1 | server: [Object],
17:39:37 web.1 | adapter: [Object],
17:39:37 web.1 | id: '7TEjGJjWzxObulClAAAD',
17:39:37 web.1 | client: [Object],
17:39:37 web.1 | conn: [Object],
17:39:37 web.1 | rooms: [Object],
17:39:37 web.1 | acks: {},
17:39:37 web.1 | connected: true,
17:39:37 web.1 | disconnected: false,
17:39:37 web.1 | handshake: [Object],
17:39:37 web.1 | _events: [Object] } },
17:39:37 web.1 | fns: [],
17:39:37 web.1 | ids: 0,
17:39:37 web.1 | acks: {},
17:39:37 web.1 | adapter:
17:39:37 web.1 | { nsp: [Circular],
17:39:37 web.1 | rooms:
17:39:37 web.1 | { '5MGPNOdO4th_dOuZAAAA': [],
17:39:37 web.1 | '64rUhxxp--4Qk1MqAAAB': [],
17:39:37 web.1 | RfgXeMgHeP_9SQC5AAAC: [Object],
17:39:37 web.1 | '7TEjGJjWzxObulClAAAD': [Object] },
17:39:37 web.1 | sids:
17:39:37 web.1 | { RfgXeMgHeP_9SQC5AAAC: [Object],
17:39:37 web.1 | '7TEjGJjWzxObulClAAAD': [Object] },
17:39:37 web.1 | encoder: {} },
17:39:37 web.1 | _events: { connection: [Function] } }
рдореЗрд░рд╛ рдХреЛрдб рд╣реИ:
`````` рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ
рдЕрдЧрд░ (game.scoreTeamTwo > game.scoreTeamOne && game.scoreTeamTwo > game.scoreTeamThree && game.scoreTeamTwo > game.scoreTeamFour) {
рдЦреЗрд▓.рд╡рд┐рдЬреЗрддрд╛ = реи;
io.sockets.emit('CTFEnd', game);
}
// рдпрд╣ рд╕рд┐рд░реНрдл рдпрд╣ рджреЗрдЦ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдХреНрдпрд╛ рдЯреАрдо 1 рдиреЗ рдЧреЗрдо рдЬреАрддрд╛ рд╣реИ рдФрд░ рдЬрдм рдпрд╣ рд╣реЛрддрд╛ рд╣реИ рддреЛ CTFEnd
рдФрд░ рдЕрдиреНрдп рд╕рднреА рдЧреЗрдо рдбреЗрдЯрд╛ рдХрд╛ рдЙрддреНрд╕рд░реНрдЬрди рд╣реЛрддрд╛ рд╣реИ
``````
рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рдХрд╛ "рд╕рдорд╛рдзрд╛рди" рдорд┐рд▓рд╛ред рдореИрдВ рдЕрд▓рдЧ рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЗ рд╣рд░ рдПрдХ рдЯреБрдХрдбрд╝реЗ рдХреЛ рднреЗрдЬ рд╕рдХрддрд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рд╡рд╕реНрддреБрдУрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ
рдореБрдЭреЗ рд╣рд╛рд▓ рд╣реА рдореЗрдВ рд╡рд╣ рддреНрд░реБрдЯрд┐ рднреА рдорд┐рд▓ рд░рд╣реА рд╣реИ, рдлрд░реНрдХ рд╕рд┐рд░реНрдл рдЗрддрдирд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрднреА-рдХрднрд╛рд░ рд╣реА рдореЗрд░реЗ рд▓рд┐рдП рд╣реЛрддрд╛ рд╣реИред рдкреВрд░реА рд╕реБрдмрд╣ рдкрд░реАрдХреНрд╖рдг рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдореИрдВ рд╕рдорд╕реНрдпрд╛ рдХреЛ рджреЛрд╣рд░рд╛рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рд╣реВрдВред
рдореЗрд░реЗ рд▓рд┐рдП рдпрд╣ рдерд╛ рдХрд┐ рдпрд╣ рдХреЗрд╡рд▓ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдирд╣реАрдВ рдерд╛, рдЬрдм рдУрдмреНрдЬ рдмрдбрд╝рд╛ рдерд╛ред
@BenBals рдпрджрд┐ рд╡рд╕реНрддреБ рдмрд╣реБрдд рдмрдбрд╝реА рд╣реИ, рддреЛ рдЗрд╕реЗ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд░реВрдк рдореЗрдВ рднреЗрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рд╣реИ рдпрд╛рдиреА рдЙрд╕ рдкрд░ JSON.stringify()
рдЪрд▓рд╛рдПрдВ
рдореБрдЭреЗ рдПрдХ рдФрд░ рдХрд╛рдо рдорд┐рд▓рд╛, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЙрд╕ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ред
:рд░реЛ: рдЗрд╕рдореЗрдВ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ
рдкреНрд░рдХрд╛рд░ рдХреА рд╡рд╕реНрддреБ рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрд░рддреЗ рд╕рдордп рдПрдХ рд╣реА рд╕рдорд╕реНрдпрд╛ рд╣реИ:
{success: file, content: file.content} рдЬрд╣рд╛рдВ file.content рдмрдлрд╝рд░ рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИ, рдФрд░ рдлрд╝рд╛рдЗрд▓ рдХреЗ рдЕрдиреНрдп рд╕рднреА рдЧреБрдг рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рд╣реИрдВред
рдлрд╝реАрд▓реНрдб рд╕рд╛рдордЧреНрд░реА рдХреЛ рд╕реАрдзреЗ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рдкрдбрд╝рд╛ рдХреНрдпреЛрдВрдХрд┐ hasBin() рдХреЗрд╡рд▓ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдкрд╣рд▓реЗ рд╕реНрддрд░ рдХреА рдЬрд╛рдВрдЪ рдХрд░рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЬрдм рдЙрд╕рдиреЗ рдмрдлрд░ рднреЗрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рддреЛ рдЙрд╕реЗ 'рдЕрдзрд┐рдХрддрдо рдХреЙрд▓ рд╕реНрдЯреИрдХ рдкрд╛рд░ рд╣реЛ рдЧрдпрд╛'
рдЖрдк рд╕реЙрдХреЗрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ (рдХрдо рд╕реЗ рдХрдо рдПрдХ рддрд░рд╣ рд╕реЗ) рдЙрддреНрд╕рд░реНрдЬрд┐рдд рдХрд░рдХреЗ рдЗрд╕реЗ рджреЛрд╣рд░рд╛ рд╕рдХрддреЗ рд╣реИрдВ (рдиреАрдЪреЗ рд╕рд░реНрд╡рд░ рд╣реЛрдЧрд╛ -> рдХреНрд▓рд╛рдЗрдВрдЯ )
socket.emit('crash', {socket:socket});
рдореИрдВ рдЙрддреНрд╕реБрдХ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рдЗрд╕рдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдлрд┐рдХреНрд╕ рд╣реИред
рдЙрд╕ рдореБрджреНрджреЗ рдкрд░ рдХреЛрдИ рдЕрдкрдбреЗрдЯ?
рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ: рдореЗрд░реА рд╕рдорд╕реНрдпрд╛ рдпрд╣ рдереА рдХрд┐ рдореИрдВ рдкреБрдирд░рд╛рд╡рд░реНрддреА рд╡рд╕реНрддреБрдУрдВ рдХреЛ рднреЗрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛ред
рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдХреНрд▓рд╛рдЗрдВрдЯ рд╕рд╛рдЗрдб рдореЗрдВ рдЕрдкрдирд╛ рдлрд╛рдпрд░рдмреЗрд╕ рдбреЗрдЯрд╛ рдкрд╛рд╕ рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╕рдордп рдореБрдЭреЗ рд╡рд╣реА рддреНрд░реБрдЯрд┐ рдорд┐рд▓ рд░рд╣реА рд╣реИред
рддреНрд░реБрдЯрд┐
node_modules/socket.io/node_modules/has-binary-data/index.js:46
for (var key in obj) {
^
RangeError: Maximum call stack size exceeded
рд╕рд░реНрд╡рд░ рд╕рд╛рдЗрдб
var DB = new Firebase('https://1234abcd.firebaseIO.com');
var USERS = DB.child("users");
io.sockets.on('connection', function(socket){
socket.emit('test', {
db: USERS
});
});
рдПрдХ рд╕рдорд╛рдзрд╛рди рдЦреЛрдЬреЛ...
рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рд▓реЗрдХрд┐рди рдореЗрд░реА рдЪреАрдиреА рдЗрддрдиреА рдорд╣рд╛рди рдирд╣реАрдВ рд╣реИред рдХреНрдпрд╛ рдЖрдк рдЗрд╕реЗ рдЕрдВрдЧреНрд░реЗрдЬреА рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрддрдиреЗ рджрдпрд╛рд▓реБ рд╣реЛрдВрдЧреЗред
рдХреНрдпрд╛ рдПрдХ Google рдЕрдиреБрд╡рд╛рдж рдХрд┐рдпрд╛ рдФрд░ рдпрд╣ "рд╕рдорд╛рдзрд╛рди рдЦреЛрдЬреЗрдВ ..." рдХреЗ рд▓рд┐рдП рдирд┐рдХрд▓рд╛ ... рд╢рд╛рдпрдж рд╣реА рдЬрд╡рд╛рдм рджреЗрдиреЗ рд▓рд╛рдпрдХ рд╣реЛред рд░рд┐рдХреЙрд░реНрдб рдХреЗ рд▓рд┐рдП, рд╕рдорд╛рдзрд╛рди рдЗрддрдиреА рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЛ socket.io рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрд╛рд░рд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реИ ... рдпрд╣ рдПрдХ рд╕реЙрдХреЗрдЯ рд╣реИ рдЬрд┐рд╕реЗ рддреНрд╡рд░рд┐рдд, рдЫреЛрдЯреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред рдЕрдкрдиреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЛ рддреЛрдбрд╝реЗрдВ рдпрд╛ рдЗрд╕реЗ рдЕрдЬрд╛рдХреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рднреЗрдЬреЗрдВред рдЗрд╕ рдзрд╛рдЧреЗ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд╕рдорд╛рдкреНрдд рдХрд░рдирд╛ред
рдПрдХ рдЪреАрдЬ рдЬреЛ рдЖрдк socket.io рдХреЛрдб рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд╡рд╣ рд╣реИ рд╡рд╕реНрддреБ рдФрд░ рдЙрд╕рдХреЗ рдЧреБрдгреЛрдВ рдХреЛ рдЕрддреБрд▓реНрдпрдХрд╛рд▓рд┐рдХ рд░реВрдк рд╕реЗ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдХрд░рдирд╛, рдХреБрдЫ рдЗрд╕ рддрд░рд╣:
var props = [];
var obj = { a: 1, b:2, c: { d: 3, e: 4 } };
function next_prop(callback){
if (!props.length){
setTimeout(callback);
return;
}
var prop = props.shift();
//do whatever with the prop, call parse_obj on it if it's an object
setTimeout(next_prop);
}
function parse_obj(obj, callback){
for (var i in obj){
props.push(i);
}
setTimeout(function(){next_prop(callback);});
}
parse_obj(obj);
рдмреЗрд╢рдХ, рдпрд╣ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреЛрдб рдирд╣реАрдВ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЖрдкрдХреЛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП, рдХреНрдпреЛрдВрдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рд╡реНрдпрдХреНрддрд┐рдЧрдд рд╡рд╕реНрддреБ рдХреЗ рд▓рд┐рдП рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рд▓рдкреЗрдЯрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИ, рдЕрдиреНрдпрдерд╛ рдЖрдк рдХрд┐рд╕ рд╡рд╕реНрддреБ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рдХреЗ рд╕рд╛рде рд╕рдВрдШрд░реНрд╖ рд╣реЛрдЧрд╛ред
рдореБрдЭреЗ рдмрд╕ рд╡рд╣ рддреНрд░реБрдЯрд┐ рднреА рдорд┐рд▓рддреА рд╣реИ, рдореЗрд░рд╛ рдХреЛрдб рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИ: "io.sockets.emit('key', data);"
рдореИрдВ "рдбреЗрдЯрд╛" рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕рд░рд▓ рдмрдирд╛рдиреЗ рдФрд░ рдЗрд╕реЗ рдЫреЛрдЯрд╛ рд░рдЦрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ, рдФрд░ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
--рдФрд░, рдореИрдВ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ, рдпрд╣ рдкрд╛рдпрд╛:
рдЬрдм рдЖрдкрдХреЗ "рдбреЗрдЯрд╛" рдСрдмреНрдЬреЗрдХреНрдЯ рдореЗрдВ рд░рд┐рдХрд░реНрд╕рд┐рд╡ рд╡рд┐рд╢реЗрд╖рддрд╛ рд░реЗрдлрд░рд┐рдВрдЧ рд╣реЛрддреА рд╣реИ, рддреЛ рдпрд╣ рдХреЛрдб рдХреНрд░реИрд╢ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
рдЬреИрд╕реЗ рдкреНрд░реЛрдЯреЛ > рдкреНрд░реЛрдЯреЛ > рдкреНрд░реЛрдЯреЛ ...
+1 рдХреЛрд░ рдЯреАрдо рдмрд╛рдЗрдирд░реА рдЪреЗрдХрд┐рдВрдЧ рдХреЗ рдПрд╕рд┐рдВрдХ рд╕рдВрд╕реНрдХрд░рдг рдХреА рддрд░рд╣ рд╣реЛрдЧреА, рдореИрдВ рдЙрд╕ рд╕реЗрдЯрдЕрдк рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ
рдореИрдВ рд╕реЙрдХреЗрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рднреЗрдЬрдХрд░ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ :)
+1 IE11 _hasBinary рдореЗрдВ 'рд╕реНрдЯреИрдХ рд╕реНрдкреЗрд╕ рд╕реЗ рдмрд╛рд╣рд░' рджрд┐рдЦрд╛рддрд╛ рд╣реИред
рдпрд╣ рддреНрд░реБрдЯрд┐ рдореЗрд░реЗ рд▓рд┐рдП рддрдм рджрд┐рдЦрд╛рдИ рджреА рдЬрдм рдореИрдВ рд╕рдВрдкреВрд░реНрдг рд╕реЙрдХреЗрдЯ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреЛ рд╡рд╛рдкрд╕ рднреЗрдЬрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣рд╛ рдерд╛ред рд╕рднреА рдореИрдВ рдЬрд░реВрд░рдд _really_ рдерд╛ socket.id
рддреЛ рддреНрд░реБрдЯрд┐ рдЧрд╛рдпрдм рд╣реЛ рдЧрдпрд╛ рдЬрдм рдореИрдВ рд╡рд╛рдкрд╕ рдПрдХ рдЫреЛрдЯреЗ рдЖрдЗрдЯрдо рднреЗрдЬрд╛ - рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, socket.id
рдкреВрд░реЗ рдХреЗ рдмрдЬрд╛рдп socket
рд╡рд╕реНрддреБ
рдпрд╣ рд╢рд╛рдпрдж рдЗрд╕рд▓рд┐рдП рд╣реБрдЖ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕рд░реНрдХреБрд▓рд░ рд╕рдВрджрд░реНрднреЛрдВ рдХреЗ рд╕рд╛рде рднреЗрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рдереЗ рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд░рд┐рдХрд░реНрд╕рд┐рд╡ рдХреЙрд▓ рд╕реНрдЯреИрдХ рдЖрдХрд╛рд░ рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛ рдЧрдП рдереЗред
@LordMajestros рдЬрд┐рд╕рдиреЗ рдЗрд╕реЗ рдореЗрд░реЗ рд▓рд┐рдП рддрдп рдХрд┐рдпрд╛! рдзрдиреНрдпрд╡рд╛рдж
@GerbenHofman рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ
рдореБрдЭреЗ NodeJS v4.4.4 рдФрд░ socket.io v1.4.5 рдкрд░ рд╕рдорд╛рди рддреНрд░реБрдЯрд┐ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред
рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдпрд╣ рдбрд┐рд╕реНрдХрдиреЗрдХреНрдЯ рдШрдЯрдирд╛ рдХреЗ рдмрд╛рдж рд╣реЛрддрд╛ рд╣реИред
рдФрд░ рдпрд╣ рддрднреА рд╣реЛрддрд╛ рд╣реИ рдЬрдм рдореИрдВрдиреЗ socket.emit
200,000 рд╕реЗ рдЕрдзрд┐рдХ рдмрд╛рд░ рдХреЙрд▓ рдХрд┐рдпрд╛ред
рдпрджрд┐ рдХреЙрд▓ рдХреА рд╕рдВрдЦреНрдпрд╛ socket.emit
рд▓рдЧрднрдЧ 100,000 рд╣реИ, рддреЛ рдпрд╣ рддреНрд░реБрдЯрд┐ рдХрднреА рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред
emit
рд╕рд╛рде рдореИрдВ рдЬрд┐рд╕ рдкреИрд░рд╛рдореАрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ рд╡рд╣ рд╣рдореЗрд╢рд╛ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╣реЛрддрд╛ рд╣реИ
рдХреНрдпрд╛ рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рдЖрдкрдХреА рдорджрдж рдХрд░рддреА рд╣реИ?
рдмрд╕ @shunjikonishi рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП, рдЬреИрд╕реЗ рд╣реА рдореИрдВрдиреЗ io.emit рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдареАрдХ 100,000 рдИрд╡реЗрдВрдЯ рднреЗрдЬреЗ
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдиреЛрдб (рдпрд╛ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд░рдирдЯрд╛рдЗрдо) рджреНрд╡рд╛рд░рд╛ рд▓рдЧрд╛рдИ рдЧрдИ рдПрдХ рд╕реАрдорд╛ рд╣реИ рдФрд░ Socket.io рд╣рд░ рдмрд╛рд░ рдЬрдм рдЖрдк рдЙрддреНрд╕рд░реНрдЬрди рдХрд╣рддреЗ рд╣реИрдВ, рддреЛ рдХрд┐рд╕реА рдЪреАрдЬрд╝ рдХрд╛ рд╕рдВрджрд░реНрдн рд░рдЦрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЬрдм рдЖрдк 100,000 рд╡реЗрдВ рдЙрддреНрд╕рд░реНрдЬрди рдХреЛ рджрдмрд╛рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдмрд╕ рдЧрд┐рд░ рдЬрд╛рддрд╛ рд╣реИред
рдиреЛрдб 5.11.0 рдФрд░ рд╕реЙрдХреЗрдЯрд┐рдпреЛ 1.4.8 рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ред рдиреЛрдб рдХрд╛ рдореЗрд░рд╛ рд╕рдВрд╕реНрдХрд░рдг рдЕрд▓рдЧ рд╣реИ (рд╕рд╛рде рд╣реА рд╕рд╛рде рдореЗрд░рд╛ рдСрдкрд░реЗрдЯрд┐рдВрдЧ рд╕рд┐рд╕реНрдЯрдо рдЗрддреНрдпрд╛рджрд┐, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдпрд╣ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдпрд╣ 100,000 рдХрд╣рд╛рдВ рд╕реЗ рдЖрддрд╛ рд╣реИ) @shunjikonishi рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЬреЛ рд╕рдордЭрд╛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ 100,000 рдкрд░ рд╕реАрдорд╛ рдХреНрдпреЛрдВ рдорд╛рд░рд╛ рдЬрдмрдХрд┐ рд╡рд╣ 200,000 рддрдХ рдкрд╣реБрдВрдЪ рдЧрдпрд╛ред
рдореИрдВрдиреЗ ws.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдареАрдХ рдЙрд╕реА рдХреЛрдб рдХреЛ рдЪрд▓рд╛рдпрд╛ рдФрд░ рдпрд╣ рдареАрдХ рдХрд╛рдо рдХрд┐рдпрд╛, рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗ 100,000 рд╕реЙрдХреЗрдЯ рдЙрддреНрд╕рд░реНрдЬрди рдХреЛ рдкрд╛рд░ рдХрд░ рдЧрдпрд╛, рдЗрд╕рд▓рд┐рдП рд╢рд╛рдпрдж рдпрд╣ Socket.io рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИред
рдХреНрдпрд╛ рд╕реЙрдХреЗрдЯ рдЖрдИрдУ рджреНрд╡рд╛рд░рд╛ рдЗрд╕ рддреНрд░реБрдЯрд┐ рд╕реЗ рдирд┐рдХрд▓рдиреЗ рд╡рд╛рд▓реЗ рдФрд░ рд╡рд┐рдлрд▓ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдбреЗрдЯрд╛ рдХреЗ рдЦрд┐рд▓рд╛рдл рдЧрд╛рд░реНрдб рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдореМрдХрд╛ рд╣реИ? рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкрд╣рдЪрд╛рди рдЗрд╕ рддреНрд░реБрдЯрд┐ рдХреЛ рд╣реЛрдиреЗ рд╕реЗ рд░реЛрдХ рд╕рдХрддреА рд╣реИ рдФрд░ рдЗрд╕рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдЕрдзрд┐рдХ рд╕рд╛рд░реНрдердХ рддреНрд░реБрдЯрд┐ рдХрд╛ рдЙрддреНрд╕рд░реНрдЬрди рдХрд░ рд╕рдХрддреА рд╣реИ, рдЬреИрд╕реЗ "рдЖрдк рдкрд░рд┐рдкрддреНрд░ рдбреЗрдЯрд╛ рднреЗрдЬрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░ рд░рд╣реЗ рд╣реЛрдВрдЧреЗ"ред рдЗрд╕рд╕реЗ рдбреАрдмрдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛ рдЬрд╛рдПрдЧрд╛ред
рд╕рд░реНрдХреБрд▓рд░ рдбреЗрдЯрд╛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЕрдЪреНрдЫреЗ рд╕рдорд╛рдзрд╛рди рд╣реИрдВ: https://stackoverflow.com/questions/14962018/detecting-and-fixing-circular-references-in-javascript
рдПрдХ рд╕рдВрдХреНрд╖рд┐рдкреНрдд рд╕рдорд╛рдзрд╛рди рд╕рдорд╕реНрдпрд╛ рдХреЛ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП JSON.stringify рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ:
function isObjectCircular(obj) {
try {
JSON.stringify(circularReference);
} catch(err) {
return (err.toString() === 'TypeError: Converting circular structure to JSON');
}
return false;
}
рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Cyclic_object_value
@adamreisnz рдкреАрдЖрд░ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдкрдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ;)
рдЬрдм рдХреЛрдИ рдЯрд┐рдкреНрдкрдгреА рдХрд░рдиреЗ рдХреЗ 5 рдорд╣реАрдиреЗ рдмрд╛рдж рдХреЛрдИ рдореЗрд░рд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд░рддрд╛ рд╣реИ рддреЛ рдпрд╣ рдореБрдЭреЗ рд╣рдореЗрд╢рд╛ рдкрд░реЗрд╢рд╛рди рдХрд░рддрд╛ рд╣реИ
рдореИрдВ рднреА рдЗрд╕ рддреНрд░реБрдЯрд┐ рд╕реЗ рдорд┐рд▓рд╛ред рдФрд░ рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЕрдкрдиреЗ рдкреВрд░реЗ рдХреЛрдб рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рджреЛ рдШрдВрдЯреЗ рдмрд░реНрдмрд╛рдж рдХрд░рддрд╛ рд╣реВрдВ:<ред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдП = {рдмреА: {рд╕реА: рдП}} рдЬреИрд╕реЗ рд░рд┐рдХрд░реНрд╕рди рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЗ рдХрд╛рд░рдг рд╣реЛрддрд╛ рд╣реИ, рдФрд░ рдЬрд╛рд╣рд┐рд░ рд╣реИ рдХрд┐ рд╕реЙрдХреЗрдЯ рдПрдХ рд░рд┐рдХрд░реНрд╕рди рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдРрд╕рд╛ рдЗрд╕рд▓рд┐рдП рд╣реБрдЖ рдХреНрдпреЛрдВрдХрд┐ рдмрдлрд░.рдЬреЗрдПрд╕ рдореЗрдВ, рд╡реЗ рдбреЗрдЯрд╛ рдХреА рд▓рдВрдмрд╛рдИ рдЦреЛрдЬрдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рд░рд┐рдХрд░реНрд╕рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕реЗ рдЖрдк рднреЗрдЬрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдФрд░ рдлрд┐рд░ "рдЕрдзрд┐рдХрддрдо рдХреЙрд▓ рд╕реНрдЯреИрдХ рдЖрдХрд╛рд░ рдкрд╛рд░ рд╣реЛ рдЧрдпрд╛" рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВред рдпрджрд┐ рд╡реЗ рд▓рдВрдмрд╛рдИ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП JSON.stringify() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ "рдЧреЛрд▓рд╛рдХрд╛рд░ рд╕рдВрд░рдЪрдирд╛" рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдФрд░ рд╕реНрдкрд╖реНрдЯ рддреНрд░реБрдЯрд┐ рд╣реЛрдЧреАред рд╡реИрд╕реЗ, рдпрд╣ Google рдХреЗ рд▓рд┐рдП рдПрдХ рдЦрд░рд╛рдм рдХреБрдВрдЬреА рд╢рдмреНрдж рд╣реИ!
рдореИрдВ рдмрд╕ рдЗрд╕рдореЗрдВ рднреА рднрд╛рдЧ рдЧрдпрд╛ред
hasBin
рдПрдХ рд╡реГрддреНрддрд╛рдХрд╛рд░ рд╕рдВрджрд░реНрдн рд╡рд╛рд▓реЗ рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рднреЗрдЬрдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░рддреЗ рд╕рдордп рд╕реНрдЯреИрдХ рдХреЛ рдПрдХ рдкреБрдирд░рд╛рд╡рд░реНрддреА рд▓реВрдк рд╕реЗ рднрд░ рджреЗрдЧрд╛ред
рд╢рдХ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрдХ рдкреАрдЖрд░ рд╣реИ рдЬреЛ 2 рд╕рд╛рд▓ рд╕реЗ рдЦреБрд▓рд╛ рд╣реИ рдЬреЛ рдЗрд╕реЗ рдареАрдХ рдХрд░реЗрдЧрд╛:
@dustingraham рдлрд┐рдХреНрд╕ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдореИрдВ рдкреНрд░рджрд░реНрд╢рди рдкреНрд░рднрд╛рд╡реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рднрд▓реЗ рд╣реА рдпрд╣ рдЕрдм hasBinary
рд╡рд┐рдзрд┐ рдореЗрдВ рдирд╣реАрдВ рдлреЗрдВрдХрддрд╛ рд╣реИ, рдореБрдЭреЗ рдбрд░ рд╣реИ рдХрд┐ JSON.stringify рд╡рд┐рдзрд┐ рдЬрд┐рд╕реЗ рдмрд╛рдж рдореЗрдВ рдХреЛрдб рдореЗрдВ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЕрднреА рднреА рдПрдХ рддреНрд░реБрдЯрд┐ рдлреЗрдВрдХ рджреЗрдЧреА:
> var a = {};
undefined
> var b = { a: a };
undefined
> a.b = b
{ a: { b: [Circular] } }
> JSON.stringify(a)
Thrown:
TypeError: Converting circular structure to JSON
at JSON.stringify (<anonymous>)
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдпрд╣ рд╢рд╛рдпрдж рдЗрд╕рд▓рд┐рдП рд╣реБрдЖ рдХреНрдпреЛрдВрдХрд┐ рдЖрдк рдХрд┐рд╕реА рдСрдмреНрдЬреЗрдХреНрдЯ рдХреЛ рд╕рд░реНрдХреБрд▓рд░ рд╕рдВрджрд░реНрднреЛрдВ рдХреЗ рд╕рд╛рде рднреЗрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рдереЗ рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рд░рд┐рдХрд░реНрд╕рд┐рд╡ рдХреЙрд▓ рд╕реНрдЯреИрдХ рдЖрдХрд╛рд░ рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛ рдЧрдП рдереЗред