2012-12-11 13 views
6

Ho un'applicazione nodeJS aggiunto con presa io ed Express come questo:collegamento utente socket aggiunto su ogni pagina HTML aggiornata?

Server:

var storeEachSocket=[]; 
var io = require('socket.io').listen(80); 
io.sockets.on('connection', function (socket) { 
    storeEachSocket.push(socket); 
    console.log(storeEachSocket.length); 
    var clients = io.sockets.clients(); //clients is an array 
    console.log(clients.length); 
}); 

Cliente:

<script src="/socket.io/socket.io.js"></script> 
<script> 
var socket = io.connect('http://localhost'); 
</script> 

Attualmente non v'è solo una pagina html servito dal server. Ho scoperto che, dopo la creazione della connessione socket tra html e server (in questo momento storeEachSocket.length è 1 e clients.length è 1), e se aggiorno questa pagina html, sia storeEachSocket.length che clients.length 2, che indica che ci sono 2 connessioni socket tra questo html e il server. Voglio sapere è normale? la prima connessione socket non si spegnerebbe anche se dopo aver creato la seconda connessione socket?

E voglio anche sapere, se intendo monitorare questo utente (html), cosa devo fare se ci sono due connessioni socket utilizzate da un solo utente?

risposta

9

L'aggiornamento della pagina non aggiunge nuova connessione, in pratica rimuove la connessione corrente e crea un'altra nuova connessione. Penso che dovresti aggiungere un listener per disconnettere l'evento e rimuovere il socket nell'array che è stato disconnesso. Inoltre, non credo che io.sockets.clients() restituirebbe 2 dopo l'aggiornamento come ho provato sul mio computer.

Se si desidera tenere traccia degli utenti, è necessario disporre di un ID utente e memorizzarlo in una raccolta di coppie chiave/valore. Quindi è possibile limitare un utente a creare 2 connessioni controllando la raccolta nel gestore di autorizzazione thr.

var storeEachSocket = {}; 
    io.set('authorization', function(handshake, accept){ 
     var user = handshake.query; 
     if(user.id in storeEachSocket) 
     accept('User already connected', false); 
     else 
     accept(null, true); 
    }); 

    io.on('connection', function(socket){ 
     var user = socket.handshake.query; 
     storeEachSocket[user.id] = socket; 
    }); 

    io.on('disconnect', function(socket){ 
     var user = socket.handshake.query; 
     delete storeEachSocket[user.id] 
    }); 
+0

beh, grazie mille. – user1893787

+0

socket.handshake.query non contiene socket.handshake.query – Sever

Problemi correlati