Ich benutze spawn-Kind Npm-Paket, um eine Shell zu erzeugen, wo ich eine binäre Datei ausführen, die ursprünglich auf C++ gebaut wurde. Ich gebe Stdins zu der Binärdatei und dann würde die Binärdatei die Stdouts ständig für jede Sekunde aussenden. Auf dem Node-Teil, sobald ich die Stdout von binary empfange, habe ich einen on
Listener, der ungefähr wie stdout.on('data', function (data) {})
aussehen würde, wo ich diese Daten an den SSE-Kanal sende.Node.js virtueller Speicher erhöht ständig während der Verwendung von Kind-Prozess
Alles funktioniert gut, aber die Hauptsorge ist das konstante Speicherwachstum des Knotenprozesses, das ich sehe, wenn ich die Binärdatei jedes Mal mit einem Stdin triff. Ich habe skizziert, wie mein Code aussieht, gibt es eine elegante Möglichkeit, dieses Speicherwachstum zu kontrollieren, wenn ja, bitte teilen.
var sseChannel = require('sse-channel'),
spawnCommand = require('spawn-command'),
cmd = 'path to the binary file',
globalArray = [],
uuid = require('uuid');
module.exports = function(app) {
var child = spawnCommand(cmd),
privateChannel = new sseChannel({
historySize: 0,
cors: {
origins: ['*']
},
pingInterval: 15 * 1000,
jsonEncode: false
});
srvc = {
get: function(req, res) {
globalArray[uuid.v4()] = res;
child.stdin.write('a json object in a format that is expected by binary' + '\n'); // req.query.<queryVal>
child.stdout.on('data', function(data) {
privateChannel.send(JSON.stringify(data));
});
},
delete: function(sessionID) {
var response = globalArray[sessionID];
privateChannel.removeClient(response);
response.end();
delete globalArray[sessionID];
}
}
}
ist dieser Code nur aufzuzählen, wie es in der App aussehen würde. Das Ausführen des Code-Snippets würde in diesem Fall nicht funktionieren.
Ich sammelte heapdump in 2 verschiedenen Intervallen und dies ist, wie die Statistik sieht, gibt es eine enorme Steigerung in dem Array-Wert typisiert ist, was getan werden könnte, zu erhalten oder das Wachstum von typisierten Array unterdrücken,
Rufen Sie 'srvc.get()' mit jeder Anforderung? – mscdex
Ja, das ist richtig. Jedes Mal, wenn eine Anfrage gemacht wird, wird ein stdin für die Binärdatei bereitgestellt und der stdout 'on' Listener würde die Daten protokollieren. – Sai
Was ist der Umfang von 'srvc'? Überschreiben Sie es bei jedem Modulanruf absichtlich? Bitte zeigen Sie uns den vollständigen Code. – Bergi