如何在不终止进程的情况下停止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