[英]How to stop a node.js server without killing the process?
Say a server is created like: 假设服务器创建如下:
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
is there a way to stop it from node.js, eg without ending/killing the whole process? 有没有办法从node.js停止它,例如没有结束/杀死整个过程?
Also, here's a more complicated example that doesn't stop regardless of the IP the server is bound to: 此外,这是一个更复杂的示例,无论服务器绑定到哪个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');
Do not call close before the "listening"
event fires. 在
"listening"
事件触发之前不要打电话。
Either add a callback to listen
or add an event manually 添加回调以
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');
Skipping to the 2nd, more realistic case: close the current connection before calling server.close
: 跳到第二个更现实的情况:在调用
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)
Note that if you don't have any other server instances or activity going on in this process it will quit after closing server
. 请注意,如果您在此过程中没有任何其他服务器实例或活动,它将在关闭
server
后退出。
If it's a HTTP or HTTPS server, it helps if you close the socket of the request with the following: 如果它是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);
Hope that helps. 希望有所帮助。
Here is an example demonstrating what I think you're after. 这是一个展示我认为你想要的东西的例子。
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() prevents new connections and waits until all the clients are closed. server.close()阻止新连接并等待所有客户端关闭。
To forcibly kill a node server you need to call server.close() and then close all the open connections from the server end. 要强制终止节点服务器,您需要调用server.close(),然后关闭服务器端的所有打开连接。
When a client connects keep track of the socket. 当客户端连接时跟踪套接字。
var sockets = []
var server = net.createServer((socket) => {
sockets.push(socket)
})
To forcibly kill ... 要强行杀死......
server.close()
sockets.forEach( (s) => s.end() )
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.