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

Posted

技术标签:

【中文标题】NodeJS:错误:在 TCP.onStreamRead (internal/stream_base_commons.js:111:27) 读取 ECONNRESET【英文标题】:NodeJS : Error: read ECONNRESET at TCP.onStreamRead (internal/stream_base_commons.js:111:27) 【发布时间】:2019-05-30 22:24:26 【问题描述】:

使用下面的轮询来检查文件内容是否改变,然后调用其他两个函数

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 (internal/streams/destroy.js:82:8) 在 emitErrorAndCloseNT (internal/streams/destroy.js:50:3)

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

让 md5Previous = null;让 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 抛出错误; // 未处理的“错误”事件 ^

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

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

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

【问题讨论】:

好像文件丢失或者你没有读取文件的权限。 它最初工作正常,但仅在 3 到 5 小时后出现错误。 嗨@Shabhana,你最后是如何解决这个问题的,你还记得吗?我现在面临同样的错误,我也在本地工作,但在我的办公室网络下发生错误。我认为这与代理设置有关,但我找不到解决方案。 【参考方案1】:

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

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

根据需求更改代码。

【讨论】:

它最初工作正常,但仅在 3 到 5 小时后出现错误。【参考方案2】:

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

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

【讨论】:

您能否详细说明 PM2 是如何解决这个问题的。是节点服务器的问题还是您尝试从中读取文件的目标服务器的问题?

以上是关于NodeJS:错误:在 TCP.onStreamRead (internal/stream_base_commons.js:111:27) 读取 ECONNRESET的主要内容,如果未能解决你的问题,请参考以下文章

如何解决nodejs安装错误

npm start 在nodejs中给出错误

Nodejs / Express:错误:无法在视图目录中查找视图“错误”

访问控制允许凭据错误--nodejs

NodeJS:承诺上的 Eslint 错误

express + nodeJS上的404错误,在正常路线上