2013-04-14 15 views
10

Ho un server socket.io nella mia app, in ascolto sulla porta 5759.Socket.io - Chiudi Server

Ad un certo punto nel mio codice ho bisogno di spegnere il server IN MODO CHE NON STA ASCOLTANDO PIÙ.

Come posso realizzare questo?

Socket.io non è in ascolto su un server http.

risposta

14

avete un server:

var io = require('socket.io').listen(8000); 
io.sockets.on('connection', function(socket) { 
    socket.emit('socket_is_connected','You are connected!'); 
}); 

Per arrestare che riceve le connessioni in entrata

io.server.close(); 

NOTA: Questo non chiudere le connessioni esistenti, che attendere per il timeout prima di essere chiusi. Per chiudere immediatamente, prima fare una lista di socket connessi

var socketlist = []; 
io.sockets.on('connection', function(socket) { 
    socketlist.push(socket); 
    socket.emit('socket_is_connected','You are connected!'); 
    socket.on('close', function() { 
     console.log('socket closed'); 
     socketlist.splice(socketlist.indexOf(socket), 1); 
    }); 
}); 

Poi chiudere tutte le connessioni esistenti

socketlist.forEach(function(socket) { 
    socket.destroy(); 
}); 

Logic risposte da qui: How do I shutdown a Node.js http(s) server immediately?

+0

uso 'io.close()' per smettere di ricevere connessioni in entrata. L'API è stata aggiornata da qualche parte ~ 2015 Q2 –

+0

'io.close()' non chiude le connessioni esistenti – rocketspacer

2

L'API è cambiato. Per non ricevere più le connessioni in entrata si dovrebbe eseguire:

io.httpServer.close(); 
10

Questa API è cambiato di nuovo nel socket.io v1.1.x. è ora:

io.close()