Server NodeJS con un Mongo DB: una funzione genererà un file JSON di report dal DB, che può richiedere un po 'di tempo (60 secondi in su - deve elaborare centinaia di migliaia di voci).Come eseguire/interrompere attività a lungo termine in Node JS?
Vogliamo eseguire questo come attività in background. Dobbiamo essere in grado di avviare un processo di creazione di report, monitorarlo e interromperlo se l'utente decide di modificare i param e ricostruirlo.
Qual è l'approccio più semplice con il nodo? Non voglio davvero entrare nei regni di server worker separati che elaborano lavori, code di messaggi, ecc. - dobbiamo mantenere questo nella stessa scatola e un'implementazione abbastanza semplice.
1) Avviare la build come metodo asincrono e tornare all'utente, con lo stato di reporting socket.io?
2) Spin off un processo figlio per lo script di compilazione?
3) Utilizzare qualcosa come https://www.npmjs.com/package/webworker-threads?
Con i pochi approcci che ho guardato rimango bloccato nelle stesse due aree;
1) Come monitorare i progressi? 2) Come interrompere un processo di compilazione esistente se l'utente invia nuovamente i dati?
Qualsiasi puntatori sarebbe molto apprezzato ...
Grazie per la risposta @soyuka. Con il 'job' var - che mantiene il riferimento al bambino, così puoi fermarlo - ma funziona su PID? I PID vengono riutilizzati, vero? Quindi il lavoro che creiamo potrebbe essere completato e il PID viene liberato per qualsiasi altro nuovo processo da intraprendere? Ciò significa che job.kill() potrebbe potenzialmente uccidere un processo diverso se funziona con il solo PID? Oppure non funziona così ... –
Basta controllare i documenti e dice ... "Può emettere un evento 'errore' quando il segnale non può essere consegnato.L'invio di un segnale a un processo figlio che è già uscito non è un errore ma può avere conseguenze impreviste: se il PID (l'ID del processo) è stato riassegnato a un altro processo, il segnale verrà consegnato a quel processo. Quello che succede dopo è l'ipotesi di chiunque. "Ma azzerare il riferimento al completamento dovrebbe risolverlo come per il tuo exmaple !! Mi dispiace, mi sono perso. –
Questo codice sembra consentire solo un processo di reporting alla volta e sovrascriverà (e perderà la traccia del lavoro precedente) se viene effettuato un tentativo di avviare un secondo 1. – jfriend00