Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如果在定义的时间范围内没有新的输出,如何退出_Node.js - Fatal编程技术网

Node.js 如果在定义的时间范围内没有新的输出,如何退出

Node.js 如果在定义的时间范围内没有新的输出,如何退出,node.js,Node.js,我正在运行一个NodeJS服务器,它由于各种因素而挂起。每次发生这种情况时,我都必须重新启动NodeJS服务器来解决问题。如果在定义的时间范围内没有输出,是否存在自动退出流程的变通方法?我认为需要setTimeout()和“process”模块,但我不知道如何优雅地实现它。以下是使用setTimeout()在时间跨度后退出进程的方法。。值得注意的是,您应该首先解决流程中的错误 var input; // your input var timeout = 60000; // timeout amo

我正在运行一个NodeJS服务器,它由于各种因素而挂起。每次发生这种情况时,我都必须重新启动NodeJS服务器来解决问题。如果在定义的时间范围内没有输出,是否存在自动退出流程的变通方法?我认为需要setTimeout()和“process”模块,但我不知道如何优雅地实现它。

以下是使用
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连接。然而,由于我使用第三方模块,我很难干预它。