NodeJS: Ошибка: прочитайте ECONNRESET в TCP.onStreamRead (internal/stream_base_commons.js:111:27)
Используя опрос, как показано ниже, чтобы проверить, изменилось ли содержимое файла, вызываются две другие функции
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; // Необработанное событие 'error' ^
Ошибка: прочитайте ECONNRESET в TCP.onStreamRead (internal/stream_base_commons.js:111:27) Выдано событие "error" в: at emitErrorNT (internal/streams/destroy.js:82:8) в emitErrorAndCloseNT (internal/streams/destroy. JS:50:3)
попытался использовать fs.watch для отслеживания изменений в файле вместо опроса, как показано ниже:
let md5Previous = null; let fsWait = false;
fs.watch (dataSourceLogFile, (событие, имя файла) => { if (имя файла) {
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; // Необработанное событие 'error' ^
Ошибка: прочитайте ECONNRESET в TCP.onStreamRead (internal/stream_base_commons.js:111:27) Выдано событие "error" в: at emitErrorNT (internal/streams/destroy.js:82:8) в emitErrorAndCloseNT (internal/streams/destroy. JS:50:3)
Но когда работает в Local Machine, все работает нормально. ошибка возникает только при запуске на удаленной машине Linux.
кто-нибудь может помочь мне, как я могу решить эту проблему?
2 ответа
Используйте fs.watchFile один раз, потому что fs.watch не согласован на разных платформах,
https://nodejs.org/docs/latest/api/fs.html
Измените свой код в соответствии с требованием.
Это происходит с тех пор, как пользователи закрывают браузер до получения запроса данных, что приводит к сбросу соединения.
Для запуска приложения использовался PM2 ( http://pm2.keymetrics.io/), и теперь он отлично работает.