2011-06-08 28 views
6

¿Cómo puedo enviar parámetros adicionales con la conexión en socket.io? Por eso, cuando un cliente se conecta, envían información adicional, y del lado del servidor que se recibe comoParámetros adicionales con socket.io

io.on('connection', function(client, param1, param2, param3) { 
    // app code 
} 
+1

¿Por qué no hacer que el cliente envíe un mensaje '" init "' cuando se conectan? – Raynos

+1

No puedes. La firma de los controladores de eventos no está definida por el usuario, la biblioteca los define. – davin

Respuesta

13

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í.

Cuestiones relacionadas