NodeJS: Ошибка: прочитайте ECONNRESET в TCP.onStreamRead (internal / stream_base_commons.js: 111: 27) - PullRequest
0 голосов
/ 04 января 2019

Используя опрос, как показано ниже, чтобы проверить, изменилось ли содержимое файла, другие две функции называются

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 бросить эр; // необработанное событие error ^

Ошибка: прочитайте ECONNRESET в TCP.onStreamRead (internal / stream_base_commons.js: 111: 27) Отправлено событие «error» в: в emitErrorNT (внутренний / streams / destroy.js: 82: 8) at 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 (внутренний / streams / destroy.js: 82: 8) в emitErrorAndCloseNT (внутренний / Струйные / destroy.js: 50: 3) * * одна тысяча двадцать восемь

Но при запуске на локальной машине все работает нормально. ошибка возникает только при запуске на удаленной машине Linux.

кто-нибудь может мне помочь, как я могу решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 06 февраля 2019

Это происходит, поскольку пользователи закрывают браузер до получения запроса данных, что приводит к сбросу соединения.

Использовал PM2 (http://pm2.keymetrics.io/) для запуска приложения, и теперь он отлично работает.

0 голосов
/ 04 января 2019

Используйте fs.watchFile один раз, потому что fs.watch не согласован для разных платформ,

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

Измените свой код в соответствии с требованием.

...