2011-09-20 31 views
16

Estoy bastante seguro de que esta es una pregunta simple, pero no tengo idea de dónde están los documentos socket.io y el de http://labs.learnboost.com/socket.io/ realmente no ayuda.¿Cerrar el servidor de socket en socket.io?

Digamos que tengo un servidor http socket.io y escribí un sitio web para conectarme a él.

  1. ¿Cómo puedo proporcionar protección al servidor para que las personas no autorizadas (personas que no conectados a través de la página web) se bloquearán/caído/prohibido.

  2. ¿Cómo finalizo una conexión de socket en el lado del servidor? Así que si tengo

    io.sockets.on('connection', function (socket) { 
    socket.on('end', function() { 
        var i = global_sockets_list.indexOf(socket); 
        global_sockets_list.splice(i, 1); 
        }); 
    
        socket.emit('end'); // Doesn't work, just sends data 
        socket.end(); //error 
    
    }); 
    

¿Cómo puedo finalizar una conexión de socket? (La conexión a continuación, desconecte anterior es para la prueba)

+0

cómo son las personas que se conectan de una manera no autorizada. Estoy trabajando con socket.io y tenía curiosidad por asegurarme de que el servidor web con socket.io esté seguro. – j10

Respuesta

18

intentar llamar a:

socket.disconnect('unauthorized'); 

o

socket.close(); 

EDIT: Usted puede ser capaz de comprobar el encabezado árbitro. Mira Socket.io Security Issues para más información.

+3

socket.close() no funciona, pero socket.disconnect() sí. THX, ¿por qué sabes dónde está la documentación completa para socket.io? – Derek

+0

Realmente no hay ninguna buena documentación detallada más allá de la wiki (ver https://github.com/LearnBoost/socket.io/wiki). En mi caso, abro el código fuente de socket.io y busco las funciones adecuadamente nombradas (como 'disconnect' o' close' :)). – Femi

+0

¿Conoces la respuesta a mi pregunta parte 1? – Derek

8

En el lado del servidor hay un método socket.disconnect que toma un significado booleano para cerrar la conexión de transporte subyacente. Aquí está el código fuente con documentos en julio de 2010:

/** 
* Disconnects this client. 
* 
* @param {Boolean} if `true`, closes the underlying connection 
* @return {Socket} self 
* @api public 
*/ 

Socket.prototype.disconnect = function(close){ 
    if (!this.connected) return this; 
    if (close) { 
    this.client.disconnect(); 
    } else { 
    this.packet({ type: parser.DISCONNECT }); 
    this.onclose('server namespace disconnect'); 
    } 
    return this; 
}; 

por lo que debe llamar socket.disconnect(true);

+2

Upvote this this because while while '' desautorizado'' funciona, funciona porque es _truthy_; esta es la forma más apropiada de usar la función 'desconexión'. – Shibumi

Cuestiones relacionadas