Spouštějte náročnou práci ve vlákně nebo v podřízeném procesu
Node.js spouští váš kód v jednom vlákně, takže dlouhý výpočet blokuje všechny požadavky. NEWTHREAD(name, data) spustí workers/<name>.js ve worker vlákně a vrátí standardní Worker z Node.js: posílejte mu zprávy přes worker.postMessage(value), odpovědi přijímejte přes worker.on('message', fn) a zastavte ho přes worker.kill(). Druhý argument (data) se workeru předá jako počáteční data. NEWFORK(name) má stejný tvar, ale spustí samostatný podřízený proces, který je od hlavního procesu izolován (jeho pád vaši aplikaci neovlivní).
Uvnitř souboru workeru NEWTHREAD() bez argumentů vrátí handle workeru: worker.data obsahuje počáteční data, worker.message = fn přijímá zprávy a worker.postMessage(value) odpovídá. Název s prefixem ~ použijte pro soubor podle cesty místo workers/<name>.js.
require('total5');
const worker = NEWTHREAD();
const start = worker.data.start;
worker.message = function(message) {
let total = start;
for (let i = 1; i <= message.to; i++)
total += i;
worker.postMessage({ total: total });
};exports.install = function() {
ROUTE('GET /sum/{to}/', sum);
};
var thread = NEWTHREAD('sum', { start: 1000 });
function sum($) {
var to = +$.params.to;
var timeout = setTimeout(() => $.invalid('timeout'), 4000);
thread.once('message', function(response) {
clearTimeout(timeout);
$.json(response);
});
thread.postMessage({ to: to });
}