使用如下所示的轮询来检查文件的内容是否被更改,然后调用其他两个函数
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机器上运行时才会发生该错误。
有人可以帮助我如何解决该问题?
答案 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
根据要求更改代码。