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

说一个服务器是这样创build的:

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,例如没有结束/杀死整个过程?

另外,下面是一个更复杂的示例,不pipe服务器绑定的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'); 

       

网上收集的解决方案 "如何在不杀死进程的情况下停止node.js服务器?"

server.close

"listening"事件发生之前,请勿致电closures。

要么添加一个callback来手动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之前closures当前连接:

 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) 

请注意,如果在此过程中没有任何其他服务器实例或活动正在进行,它将在closuresserver之后退出。

如果是HTTP或HTTPS服务器,那么使用以下命令closures请求的套接字将有所帮助:

 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()阻止新的连接,并等待所有的客户端closures。

为了强制杀死一个你需要调用server.close()的节点服务器,然后closures服务器端的所有打开的连接。

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

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

为了强行杀死…

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