Parece que solo puedo emitir mensajes a los usuarios cuando su id. De socket se ha almacenado directamente en la función io.sockets.on ('connect'). No sé por qué no funciona cuando se trata de almacenar su ID toma después de que hayan iniciado sesión enEnviar un mensaje a un cliente a través de su socket.id
de Trabajo:.
No trabaja:
var clients = {};
/** A new socket connection has been accepted */
io.sockets.on('connection', function (socket)
{
//Used to access session id
var hs = socket.handshake;
clients[socket.id] = socket; // add the client data to the hash
socket.on('user-login', function(user){
if(!users['brownj2']){
users['brownj2'] = socket.id; // connected user with its socket.id
}
})
socket.on('page-load', function(pid)
{
if(users['brownj2'])
{
clients[users['brownj2']].emit('hello');
}
else
{
console.log("NOT FOUND BROWNJ2");
}
}
}
JavaScript Fragmento de código del lado del cliente
var socket = io.connect('');
socket.on("hello", function(){
alert("Hi Jack");
console.log("WEBSOCKET RECIEVED");
})
Solución: Gracias @alessioalex he tenido que eliminar la referencia a Socket.IO desde la página de inicio de sesión, y añadir lo siguiente en io.sockets.on ('conexión')
var hs = socket.handshake;
sessionStore.get(hs.sessionID, function(err, session){
console.log("SESSION: " + util.inspect(session));
clients[socket.id] = socket; // add the client data to the hash
validUsers[session.username] = socket.id; // connected user with its socket.id
})
Gracias, funciona sin embargo cuando intento utilizar socket.on ('login', .....) {usuarios [u] = socket.id} no funciona. Solo puedo agregar usuarios directamente dentro de io.sockets.on ('connection') – Jack
¿Estás seguro? Como el socket es una variable definida 'arriba', también debería estar visible en esa función, tal como lo muestro en mi ejemplo con desconexión. – alessioalex
He modificado la pregunta para mostrarle un ejemplo que funciona y no funciona. No puedo entender por qué no me permite enviar mensajes en el ejemplo 'no operativo' anterior. – Jack