如何在不杀死进程的情况下停止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');
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() )