Cualquiera que sea la versión que estemos usando si solo consolamos.log () el objeto "io" que usamos en nuestro código del nodo del lado del servidor, [por ejemplo, io.on ('conexión', función (socket) {...});] , podemos ver que "io" es solo un objeto json y hay muchos objetos secundarios donde se almacenan el id del socket y los objetos del socket.
Estoy usando socket.io versión 1.3.5, por cierto.
Si miramos en el objeto io, contiene,
sockets:
{ name: '/',
server: [Circular],
sockets: [ [Object], [Object] ],
connected:
{ B5AC9w0sYmOGWe4fAAAA: [Object],
'hWzf97fmU-TIwwzWAAAB': [Object] },
aquí podemos ver los socketids "B5AC9w0sYmOGWe4fAAAA", etc. Entonces, podemos hacer,
io.sockets.connected[socketid].emit();
Nuevamente, en una inspección adicional podemos ver segmentos como,
eio:
{ clients:
{ B5AC9w0sYmOGWe4fAAAA: [Object],
'hWzf97fmU-TIwwzWAAAB': [Object] },
Entonces, podemos recuperar un socket desde aquí haciendo
io.eio.clients[socketid].emit();
Además, debajo del motor tenemos,
engine:
{ clients:
{ B5AC9w0sYmOGWe4fAAAA: [Object],
'hWzf97fmU-TIwwzWAAAB': [Object] },
Entonces, también podemos escribir,
io.engine.clients[socketid].emit();
Entonces, supongo que podemos lograr nuestro objetivo en cualquiera de las 3 formas que enumeré anteriormente,
- io.sockets.connected [socketid] .emit (); O
- io.eio.clients [socketid] .emit (); O
- io.engine.clients [socketid] .emit ();