12

我的应用程序中有一个 socket.io 服务器,监听端口 5759。

在我的代码中的某个时刻,我需要关闭服务器,所以它不再监听了

我怎样才能做到这一点?

Socket.io 未在 http 服务器上侦听。

4

3 回答 3

16

你有一个服务器:

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

停止接收传入连接

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

逻辑从这里开始:如何立即关闭 Node.js http(s) 服务器?

于 2013-04-14T20:10:00.783 回答
16

这个 api 在 socket.io v1.1.x 中再次发生了变化,现在是:

io.close()
于 2015-06-18T12:01:35.053 回答
3

API 已更改。要停止接收传入连接,您应该运行:

io.httpServer.close();
于 2015-06-11T18:24:53.663 回答