Node.js 如果在定义的时间范围内没有新的输出,如何退出
我正在运行一个NodeJS服务器,它由于各种因素而挂起。每次发生这种情况时,我都必须重新启动NodeJS服务器来解决问题。如果在定义的时间范围内没有输出,是否存在自动退出流程的变通方法?我认为需要setTimeout()和“process”模块,但我不知道如何优雅地实现它。以下是使用Node.js 如果在定义的时间范围内没有新的输出,如何退出,node.js,Node.js,我正在运行一个NodeJS服务器,它由于各种因素而挂起。每次发生这种情况时,我都必须重新启动NodeJS服务器来解决问题。如果在定义的时间范围内没有输出,是否存在自动退出流程的变通方法?我认为需要setTimeout()和“process”模块,但我不知道如何优雅地实现它。以下是使用setTimeout()在时间跨度后退出进程的方法。。值得注意的是,您应该首先解决流程中的错误 var input; // your input var timeout = 60000; // timeout amo
setTimeout()在时间跨度后退出进程的方法。
。值得注意的是,您应该首先解决流程中的错误
var input; // your input
var timeout = 60000; // timeout amount
setTimeout(timeout, function() {
if (!input)
process.exit(1);
});
process
模块和setTimeout()
都是全局性的,您的模块可以从Node.js核心API自动使用它们
编辑-子进程 由于您的“挂起”是基于此TCP模块的,所以请获取您的实现模块并使用运行它。然后,您可以对模块的输出不足做出反应,并相应地终止进程 创建一个新文件并将以下内容放入其中
var process = require('child_process');
// Spawn your Hanging Code
var tcp = process.fork('<pathToYourTcpCode>');
var timeout = 60000; // timeout amount
var output = '';
tcp.stdout.on('data', function(data) {
output += data;
});
setTimeout(timeout, function() {
if (!output)
tcp.kill('SIGINT');
});
var-process=require('child_-process');
//生成挂起的代码
var tcp=process.fork(“”);
变量超时=60000;//超时量
var输出=“”;
tcp.stdout.on('data',函数(data){
输出+=数据;
});
setTimeout(超时,函数(){
如果(!输出)
tcp.kill('SIGINT');
});
以下是使用setTimeout()
在时间跨度后退出进程的方法。值得注意的是,您应该首先解决流程中的错误
var input; // your input
var timeout = 60000; // timeout amount
setTimeout(timeout, function() {
if (!input)
process.exit(1);
});
process
模块和setTimeout()
都是全局性的,您的模块可以从Node.js核心API自动使用它们
编辑-子进程 由于您的“挂起”是基于此TCP模块的,所以请获取您的实现模块并使用运行它。然后,您可以对模块的输出不足做出反应,并相应地终止进程 创建一个新文件并将以下内容放入其中
var process = require('child_process');
// Spawn your Hanging Code
var tcp = process.fork('<pathToYourTcpCode>');
var timeout = 60000; // timeout amount
var output = '';
tcp.stdout.on('data', function(data) {
output += data;
});
setTimeout(timeout, function() {
if (!output)
tcp.kill('SIGINT');
});
var-process=require('child_-process');
//生成挂起的代码
var tcp=process.fork(“”);
变量超时=60000;//超时量
var输出=“”;
tcp.stdout.on('data',函数(data){
输出+=数据;
});
setTimeout(超时,函数(){
如果(!输出)
tcp.kill('SIGINT');
});
在不断重新启动服务器之前,我会先修复它被挂起的原因。通过这样做,您将破坏节点当前正在实现的功能。在黑客入侵之前,试着找出它为什么会断裂!在不断重新启动服务器之前,我会努力修复它被挂起的原因。通过这样做,您将破坏任何节点当前正在实现的功能。在黑客入侵之前,试着找出它为什么会断裂!如果服务器实际上处于“挂起”状态,并且不再运行Javascript,则此操作将不起作用。@jfriend00是的,这是正确的,但如果它只是等待从未调用且实际上未处于“挂起”状态的I/O回调的输出,则此操作将起作用。我就是这样理解这个问题的。为了将这个黑客行为与代码分离(这有点复杂),我们是否有可能自己获得控制台输出?为什么不在正在执行的代码中使用console.log()
,查看它的“挂起”位置,然后从那里进行调试?@peteb我认为这是一个TCP连接。但是因为我使用了第三方模块,所以我很难对其进行干预。如果服务器实际上处于“挂起”状态并且不再运行Javascript,这将不起作用。@jfriend00是的,这是真的,但如果它只是等待从未被调用且实际上没有“挂起”的I/O回调的输出,这将起到作用。我就是这样理解这个问题的。为了将这个黑客行为与代码分离(这有点复杂),我们是否有可能自己获得控制台输出?为什么不在正在执行的代码中使用console.log()
,查看它的“挂起”位置,然后从那里进行调试?@peteb我认为这是一个TCP连接。然而,由于我使用第三方模块,我很难干预它。