簡體   English   中英

如何在不殺死進程的情況下停止node.js服務器?

[英]How to stop a node.js server without killing the process?

假設服務器創建如下:

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

server.close

"listening"事件觸發之前不要打電話。

添加回調以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');

跳到第二個更現實的情況:在調用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后退出。

如果它是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();

server.close()阻止新連接並等待所有客戶端關閉。

要強制終止節點服務器,您需要調用server.close(),然后關閉服務器端的所有打開連接。

當客戶端連接時跟蹤套接字。

var sockets = []

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

要強行殺死......

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM