2013-04-14 233 views
10

我有一個socket.io服務器在我的應用程序,監聽端口5759Socket.io - 關閉服務器

在我的代碼中的一些問題,我需要關閉服務器所以它不是聆聽了

我該如何做到這一點?

Socket.io不在HTTP服務器上偵聽。

回答

14

你有一臺服務器:

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

要停止recieving傳入連接

io.server.close(); 

注意:這不會關閉現有連接,這將等待超時他們被關閉之前。要立即關閉它們,首先要連接的插座

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

的名單,然後關閉所有現有的連接

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

邏輯從這裏撿到:How do I shutdown a Node.js http(s) server immediately?

+0

使用'io.close()'來停止接收傳入的連接。 API已更新〜2015年第二季度 –

+0

'io.close()'雖然不關閉現有連接 – rocketspacer

2

的API已經改變。要停止接收傳入的連接,你應該運行:

io.httpServer.close(); 
10

這個API已在socket.io v1.1.x 又變了,現在是:

io.close()