2011-09-20 11 views
16

Sono abbastanza sicuro che questa è una domanda semplice, ma non ho idea di dove siano i documenti socket.io e quello a http://labs.learnboost.com/socket.io/ non è di grande aiuto.Chiusura di un socket server side su socket.io?

Quindi supponiamo di avere un server http socket.io e di scrivere un sito Web per connettersi ad esso.

  1. Come faccio a fornire protezione al server in modo che le persone non autorizzate (persone che non collegati tramite il sito) saranno bloccati/Dropped/vietati.

  2. Come si termina una connessione socket sul lato server? Quindi, se ho

    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 
    
    }); 
    

Come faccio a terminare una connessione socket? (Connetti quindi scollegare sopra è per la prova)

+0

quanto sono persone che si collegano in maniera non autorizzata. Sto lavorando con socket.io ed ero curioso di assicurarmi che il web server con socket.io sia protetto. – j10

risposta

18

provare a chiamare:

socket.disconnect('unauthorized'); 

o

socket.close(); 

EDIT: Potreste essere in grado di controllare l'intestazione referer. Guarda Socket.io Security Issues per maggiori informazioni.

+3

socket.close() non funziona, ma socket.disconnect() ha funzionato. THX, come sai dov'è la documentazione completa per socket.io? – Derek

+0

Non c'è davvero una buona documentazione dettagliata oltre la wiki (vedi https://github.com/LearnBoost/socket.io/wiki). Nel mio caso apro il codice sorgente socket.io e cerco funzioni opportunamente denominate (come 'disconnect' o' close' :)). – Femi

+0

Conosci la risposta alla mia domanda parte 1? – Derek

8

Sul lato server esiste un metodo socket.disconnect che assume un significato booleano per chiudere la connessione di trasporto sottostante. Ecco il codice sorgente con i documenti a partire da luglio 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; 
}; 

così si dovrebbe chiamare socket.disconnect(true);

+2

Upvote per questo perché, mentre "non autorizzato" funziona, funziona perché è _truthy_; questo è il modo più appropriato di usare la funzione 'disconnect'. – Shibumi