NodeJS:错误:在TCP.onStreamRead上读取ECONNRESET(内部/stream_base_commons.js:111:27)

时间:2019-01-04 10:44:32

标签: node.js econnreset

使用如下所示的轮询来检查文件的内容是否被更改,然后调用其他两个函数

var poll_max_date=AsyncPolling(function (end,err) {   if(err)   {
       console.error(err);   }   var stmp_node_id=fs.readFileSync(path.join(__dirname,'node_id'),"utf8"); 
   console.log("--------loaded node : "+stmp_node_id);  
   if(druid_stmp_node_id!=stmp_node_id)   {
         // MAX DATA CUT-OFF DRUID QUERY
         druid_exe.max_date_query_fire();

         // // DRUID QUERY FOR GLOBAL DATA
         druid_exe.global_druid_query_fire();

         druid_stmp_node_id=stmp_node_id;   }

     end(); }, 1800000).run();//30 mins

它可以正常工作一段时间,但随后会在4到5个小时后出现以下错误:

  

events.js:167         投掷者//未处理的“错误”事件         ^

     

错误:读取ECONNRESET       在TCP.onStreamRead上(internal / stream_base_commons.js:111:27)在以下位置发出了“错误”事件:       在emitErrorNT上(内部/流/destroy.js:82:8)       在emitErrorAndCloseNT(internal / streams / destroy.js:50:3)

尝试使用fs.watch监视文件中的更改,而不是如下所示进行轮询:

  

let md5Previous = null;让fsWait = false;

     

fs.watch(dataSourceLogFile,(event,filename)=> {如果(filename){

if (fsWait) return;
fsWait = setTimeout(() => {
  fsWait = false;
}, 1000);

const md5Current = md5(fs.readFileSync(dataSourceLogFile));
if (md5Current === md5Previous) {
  return;
}

md5Previous = md5Current;

console.log(`${filename} file Changed`);

// MAX DATA CUT-OFF DRUID QUERY
druid_exe.max_date_query_fire();
// DRUID QUERY FOR GLOBAL DATA
druid_exe.global_druid_query_fire();   } });

它在一段时间内也可以正常工作,但随后出现相同的错误,例如4-5小时后:

  

events.js:167 throw er; //未处理的“错误”事件^

     

错误:在TCP.onStreamRead上读取ECONNRESET   (internal / stream_base_commons.js:111:27)在以下位置发出了“错误”事件:   generateErrorNT(internal / streams / destroy.js:82:8)在emitErrorAndCloseNT   (internal / streams / destroy.js:50:3)

但是在本地计算机上运行时,它可以正常工作。仅在远程Linux机器上运行时才会发生该错误。

有人可以帮助我如何解决该问题?

2 个答案:

答案 0 :(得分:1)

自从用户在接收到数据请求之前关闭浏览器以来就一直在发生,导致连接重置。

使用PM2(http://pm2.keymetrics.io/)运行该应用程序,并且现在运行良好。

答案 1 :(得分:0)

一次使用fs.watchFile,因为跨平台fs.watch不一致,

https://nodejs.org/docs/latest/api/fs.html#fs_fs_watchfile_filename_options_listener

根据要求更改代码。