如何在不杀死进程的情况下停止node.js服务器?

时间:2012-01-20 14:44:24

标签: node.js

假设服务器创建如下:

var net = require('net');

var server = net.createServer();
server.listen(32323, '127.0.0.1');

server.close(); // gives a "not running" error if there is IP in the listen statement

有没有办法从node.js停止它,例如没有结束/杀死整个过程?

此外,这是一个更复杂的示例,无论服务器绑定的IP如何都不会停止:

var net = require('net');

var server = net.createServer(function(socket) {
    socket.on('data', console.log);
    server.close();
});

server.listen(32323);

var socket = net.createConnection(32323);
socket.write('hi');

5 个答案:

答案 0 :(得分:21)

server.close

请勿在{{1​​}}事件触发前调用close。

将回调添加到"listening"或手动添加事件

listen

答案 1 :(得分:4)

跳至第二个更现实的案例:在致电server.close之前关闭当前连接:

var net = require('net')

var server = net.createServer(function(socket){
    socket.on('data', function(data){
        console.log(data.toString())
        socket.destroy()
        server.close()
    })
})

server.listen(32323)

请注意,如果您在此过程中没有任何其他服务器实例或活动,则会在关闭server后退出。

答案 2 :(得分:3)

如果它是HTTP或HTTPS服务器,如果您使用以下命令关闭请求的套接字会有所帮助:

function onRequest(request, response) {
    response.end(); //close the response
    request.connection.end(); //close the socket
    request.connection.destroy; //close it really
    server.close(); //close the server
}

server.on("request", onRequest);
server.on("close", function() {console.log("closed");});

server.listen(port, host);

希望有所帮助。

答案 3 :(得分:0)

这是一个展示我认为你所追求的东西的例子。

var net = require('net');


var server = net.createServer(function (socket) {
  socket.on('data', function (data) {
    console.log("server got data " + data.toString());

  });
});

function startServer() {
  server.listen(32323, function () {
    console.log('server started');
  });
}

function stopServer() {
  server.close(function () {
    console.log('server stopped');
  });
}

setInterval(function () {

  if (server.address()) {
    console.log("Server is running on port " + server.address().port + " let's kill it.");
    stopServer();
  } else {
    console.log("Server is stopped let's start it.");
    startServer();
  }

}, 10000);


setInterval(function () {

  var socket = net.createConnection(32323, function () {
    socket.write('hi');
  });
  socket.on('error', function (e) {
    console.log(e.message);
  });


}, 1000);

startServer();

答案 4 :(得分:0)

server.close()阻止新连接并等待所有客户端关闭。

要强行终止节点服务器,需要调用server.close(),然后关闭服务器端的所有打开连接。

当客户端连接时跟踪套接字。

var sockets = []

var server = net.createServer((socket) => {
   sockets.push(socket)
})

强行杀人......

server.close()
sockets.forEach( (s) => s.end() )
相关问题