Qualquer que seja a versão que estamos usando, se apenas console.log () o objeto "io" que usamos no código nodejs do servidor, [por exemplo, io.on ('conexão', função (soquete) {...});] , podemos ver que "io" é apenas um objeto json e há muitos objetos filhos nos quais o ID do soquete e os objetos do soquete são armazenados.
Estou usando o socket.io versão 1.3.5, btw.
Se olharmos no objeto io, ele contém,
sockets:
{ name: '/',
server: [Circular],
sockets: [ [Object], [Object] ],
connected:
{ B5AC9w0sYmOGWe4fAAAA: [Object],
'hWzf97fmU-TIwwzWAAAB': [Object] },
aqui podemos ver os socketids "B5AC9w0sYmOGWe4fAAAA" etc. Então, podemos fazer,
io.sockets.connected[socketid].emit();
Novamente, em uma inspeção mais aprofundada, podemos ver segmentos como,
eio:
{ clients:
{ B5AC9w0sYmOGWe4fAAAA: [Object],
'hWzf97fmU-TIwwzWAAAB': [Object] },
Então, podemos recuperar um soquete daqui fazendo
io.eio.clients[socketid].emit();
Além disso, sob o motor, temos,
engine:
{ clients:
{ B5AC9w0sYmOGWe4fAAAA: [Object],
'hWzf97fmU-TIwwzWAAAB': [Object] },
Então, também podemos escrever,
io.engine.clients[socketid].emit();
Acho que podemos alcançar nosso objetivo de qualquer uma das três maneiras listadas acima,
- io.sockets.connected [socketid] .emit (); OU
- io.eio.clients [socketid] .emit (); OU
- io.engine.clients [socketid] .emit ();