2

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

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

错误:在 TCP.onStreamRead (internal/stream_base_commons.js:111:27) 读取 ECONNRESET 在 emitErrorNT (internal/streams/destroy.js:82:8) 在 emitErrorAndCloseNT (internal/streams/destroy. js:50:3)

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

让 md5Previous = null; 让 fsWait = 假;

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 (internal/stream_base_commons.js:111:27) 读取 ECONNRESET 在 emitErrorNT (internal/streams/destroy.js:82:8) 在 emitErrorAndCloseNT (internal/streams/destroy. js:50:3)

但是当在本地机器上运行时,它工作正常。该错误仅在远程 Linux 机器上运行时发生。

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

4

2 回答 2

2

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

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

根据要求更改您的代码。

于 2019-01-04T11:27:24.830 回答
2

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

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

于 2019-02-06T06:52:30.383 回答