Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在不终止进程的情况下停止node.js服务器?_Node.js - Fatal编程技术网

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

如何在不终止进程的情况下停止node.js服务器?,node.js,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停止它,例如不结束/终止整个过程 此外,还有一个更复杂的示例,无论服务器绑定到哪个

假设服务器是这样创建的:

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

在触发
“侦听”
事件之前,不要调用close

将回调添加到
listen
或手动添加事件

server.listen(port, host, function () { server.close(); });
// OR
server.on("listening", function () { server.close(); });
server.listen(port, host);

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);
// call end to make sure the socket closes
socket.end('hi');

跳到第二种更现实的情况:在调用
服务器之前关闭当前连接。关闭

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)

请注意,如果在此过程中没有任何其他服务器实例或活动正在进行,则在关闭
服务器

后将退出。如果是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);

希望这能有所帮助。

这里有一个例子,说明我认为你在追求什么

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();
close()阻止新连接并等待所有客户端关闭

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

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

var sockets = []

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

server.close()
sockets.forEach( (s) => s.end() )

我不明白。在我的第二个代码片段中,我在收到消息后调用
close
,显然服务器当时一直在监听。请修复我的第二个示例,以便服务器在收到第一条消息后立即关闭?在第二个示例中,在收到消息并调用
server.close
后,节点的进程仍在运行running@Fluffy那是因为你没有关上插座。确保您呼叫
.end