NodeJS:错误:在TCP.onStreamRead(internal/stream_base_commons.js:111:27)处读取ECONNRESET。

3
使用如下所示的轮询方式来检查文件内容是否更改,然后调用其他两个函数。
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 throw er; // Unhandled 'error' event ^

Error: read ECONNRESET at TCP.onStreamRead (internal/stream_base_commons.js:111:27) Emitted 'error' event at: at emitErrorNT (internal/streams/destroy.js:82:8) at emitErrorAndCloseNT (internal/streams/destroy.js:50:3)

尝试使用fs.watch来监视文件中的更改,而不是像下面这样轮询:

let md5Previous = null; let fsWait = false;

fs.watch(dataSourceLogFile, (event, filename) => { if (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; // Unhandled 'error' event ^

Error: read ECONNRESET at TCP.onStreamRead (internal/stream_base_commons.js:111:27) Emitted 'error' event at: at emitErrorNT (internal/streams/destroy.js:82:8) at emitErrorAndCloseNT (internal/streams/destroy.js:50:3)

但是当在本地机器上运行时,它能够正常工作。只有在远程Linux机器上运行时才会出现错误。

有人可以帮助我解决这个问题吗?


似乎文件丢失或您没有读取文件的权限。 - undefined
最初它运行得很好,但只在3到5小时后出现错误。 - undefined
嗨@Shabhana,你最后是怎么解决这个问题的?你还记得吗?我现在也遇到了同样的错误,而且在我的本地环境下工作正常,但在办公室网络下出现错误。我觉得这可能与代理设置有关,但我找不到解决办法。 - undefined
2个回答

2

2
最初它运行得很好,但在3到5个小时后出现错误。 - undefined

2

由于用户在数据请求接收之前关闭了浏览器,导致出现连接重置问题。

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

Original Answer 翻译成 "最初的回答"。


3
您能详细说明一下PM2是如何解决这个问题的吗?这个问题是出现在Node服务器上还是您试图从目标服务器读取文件时出现的? - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接