Aquí hay un pequeño truco que debe trabajar. Primero, crea su propio cliente Socket que envía un mensaje en la primera conexión (que contiene toda su información adicional).
// Client side
io.MySocket = function(your_info, host, options){
io.Socket.apply(this, [host, options]);
this.on('connect', function(){
this.send({__special:your_info});
});
};
io.util.inherit(io.MySocket, io.Socket);
var my_info = {a:"ping"}
var socket = io.MySocket(my_info);
Luego, en el lado del servidor, modificas el socket para escuchar el mensaje especial y disparar un evento cuando lo hace.
// Server side
var io = require('socket.io').listen(app);
io.on('connection', function(client){
client.on('message', function(message){
if (message.__special) {
io.emit('myconnection', client, message.__special);
}
});
});
io.on('myconnection', function(client, my_info) {
// Do your thing here
client.on('message', ...); // etc etc
}
Esta es la técnica que utilicé para vincular el manejo de mi sesión con Socket.IO para un paquete que escribí.
¿Por qué no hacer que el cliente envíe un mensaje '" init "' cuando se conectan? – Raynos
No puedes. La firma de los controladores de eventos no está definida por el usuario, la biblioteca los define. – davin