He seguido esta guía: http://www.danielbaulig.de/socket-ioexpress/ para vincular express.js a socket.io y funciona de manera brillante.Cómo detectar conexiones socket.io múltiples del mismo usuario
Tengo el usuario que inicia sesión en una página (solicitud POST express.js que establece un objeto de sesión) y cuando se han autenticado lo dirige a una nueva página donde se carga socket.io y en el servidor socket.io agarra la sesión que se estableció desde express. Para que todo funcione bien
Ahora tengo usuarios en la página que usa socket.io y cuando esa página se actualiza: a veces la conexión de socket.io todavía está allí (es decir, no se desconecta). Lo que intento hacer es alterar la función io.set('authorization')
para garantizar que cuando el usuario se conecte, desconectará todas las instancias socket.io existentes que aún estén abiertas para ese cliente.
Aquí está el cómo se ve en la actualidad
//socket.io connect to express
var parseCookie = require('connect').utils.parseCookie;
io.set('authorization', function (data, accept) {
if (data.headers.cookie)
{
data.cookie = parseCookie(data.headers.cookie);
data.sessionID = data.cookie['express.sid'];
// (literally) get the session data from the session store
sessionStore.get(data.sessionID, function (err, session)
{
if (err || !session)
{
// if we cannot grab a session, turn down the connection
//note: a session is created when the user logs in
accept('Error', false);
}
else
{
//TODO something here before we accept the connection
//??
// save the session data
data.session = session;
//accept the connection
accept(null, true);
}
});
}
else
{
return accept('No cookie transmitted.', false);
}
});
¿Cómo puedo comprobar si el cliente que está a punto de ser aceptada tiene una conexión anterior, y todavía está abierta (y por lo tanto tenemos que desconecta el viejo).
La sesión exprés tiene un "nombre de usuario" en ella, así que podemos obtener el objeto de sesión y obtener el nombre de usuario, simplemente no puedo entender cómo revisar la lista de todos los clientes de socket.io y tener un Mire la sesión express para cada uno y verifique si es igual que la autentificación del usuario actualmente.
Sí, esto está mirando ser la opción más fácil. Aunque estoy seguro de que debe haber una manera de hacerlo con la variable global socket.io. – Andrew
Utilizo TornadIO2, en cuyo caso no existe un camino integrado para tal cosa (leo el código fuente línea por línea buscando uno). Pero si utilizo Node.js con socket.io en el servidor, entonces no estoy tan seguro. –
Sí, parece que esta era la forma más fácil de hacer las cosas. Ahora estoy almacenando todas las conexiones en una matriz, así que tengo acceso a ellas ... Saludos por eso. – Andrew