Tengo esta función para obtener datos de otro servidor (básicamente envía un comando para ejecutar un programa de python, que escribe una salida en un archivo de texto en la máquina remota y luego devuelve el contenido del archivo txt)
const getServerStatus = () => { // returns result of of screen -ls const commandQuery = "python3 /home/user/scripts/getServerStatus.py && cat /home/user/scripts/status.txt"; return fetch('http://10.0.0.253:3005/fetch', { method: 'POST', headers: { 'Accept': 'application/json', 'Content-Type': 'application/json' }, body: JSON.stringify({ command: commandQuery }) }) .then(res => { return res.json(); }) .then(data => { return data.status; }) .catch(err => { // it catches when fatch fails (server is off) return 'OFF'; }); };
Y la función se ejecuta cuando el usuario visita la página de inicio.
app.get('/', checkAuthenticated, async (req, res) => { const status = await getServerStatus() .then(data => { return data; }); res.render('index.ejs', { name: req.user.username, title: 'home', server_status: status }); })
Funciona sin problemas y devuelve datos y la página de inicio se muestra muy rápido, pero el problema es que si no actualizo la página web durante un período de tiempo (tal vez como 2-3 minutos más o menos), tome alrededor de 8-10 segundos para buscar y mostrar la página de inicio nuevamente. Simplemente no puedo entender cuál es el problema. Creo que hay algún problema con mis funciones asíncronas, pero no estoy seguro. ¿O tal vez mi servidor de nodos se pone en modo inactivo cuando no hay conexiones entrantes?
mi punto final /fetch
app.post('/fetch', (req, res) => { exec(req.body.command, function (error, stdout, stderr) { res.send(JSON.stringify({status :stdout.replace(/\s/g, '')})); console.log('[+] SERVER STATUS SENT'); if (error !== null) { console.log('exec error: ' + error); } }); });
Resultó que es un problema de hardware? de mi raspberry pi 4. Si ejecuto el proyecto de nodo en una raspberry pi diferente, no hace eso y funciona perfectamente sin problemas.