Il mio caso d'uso è il seguente: Faccio molte chiamate API di resto dal mio server di nodo alle API pubbliche. A volte la risposta è grande ea volte è piccola. Il mio caso d'uso mi impone di stringificare la risposta JSON. Conosco un grande JSON in quanto la risposta bloccherà il mio ciclo degli eventi. Dopo alcune ricerche ho deciso di utilizzare child_process.fork per analizzare queste risposte, in modo che le altre chiamate API non debbano attendere. Ho provato a inviare un grande file JSON da 30 MB dal mio processo principale al child_process forked. Ci vuole così tanto tempo prima che il processo figlio scelga e analizzi il json. La risposta che mi aspetto dal processo figlio non è enorme. Voglio solo stringificare e ottenere la lunghezza e inviare di nuovo al processo principale.Node.js - L'invio di un oggetto grande a child_process è lento
Im collegare il codice master e figlio.
var moment = require('moment');
var fs = require('fs');
var process = require('child_process');
var request = require('request');
var start_time = moment.utc().valueOf();
request({url: 'http://localhost:9009/bigjson'}, function (err, resp, body) {
if (!err && resp.statusCode == 200) {
console.log('Body Length : ' + body.length);
var ls = process.fork("response_handler.js", 0);
ls.on('message', function (message) {
console.log(moment.utc().valueOf() - start_time);
console.log(message);
});
ls.on('close', function (code) {
console.log('child process exited with code ' + code);
});
ls.on('error', function (err) {
console.log('Error : ' + err);
});
ls.on('exit', function (code, signal) {
console.log('Exit : code : ' + code + ' signal : ' + signal);
});
}
ls.send({content: body});
});
response_handler.js
console.log("Process " + process.argv[2] + " at work ");
process.on('message', function (json) {
console.log('Before Parsing');
var x = JSON.stringify(json);
console.log('After Parsing');
process.send({msg: 'Sending message from the child. total size is' + x.length});
});
C'è un modo migliore per ottenere ciò che im cercando di fare? Da un lato ho bisogno della potenza di node.js per fare migliaia di chiamate API al secondo, ma a volte ho un grosso JSON che rovina tutto.
Il tuo approccio sembra andare bene. Quando si dice "my node server", capisco che si tratta di un processo che serve i client.Hai davvero bisogno di fare le chiamate API dal tuo server? Non puoi delegare l'attività a diversi processi e impostare un canale di comunicazione tra loro e il tuo server come un broker di messaggi, Redis o semplicemente pipe o qualche altra forma di IPC? – kliron
Il mio male, per chiamare questo come un server, si può considerare questo come un agente. Questo non serve a nessuno. Questo agente funge da client API altamente scalabile. – Vinoth
Forse puoi usare lo streaming parser json piuttosto che farlo in un unico blocco con JSON. – mcfedr