In Bezug auf den folgenden Code sollte die Anwendung 4 Arbeiter bei jeder Verbindung Gabel, dann jeder Arbeiter eine Nachricht senden und trennen.Cluster-Ereignismeldung mehrmals aufgerufen
Nach der ersten Verbindung jedoch cluster.on('message')
Nachricht inkrementell empfangen.
const express = require('express');
const cluster = require('cluster');
if (cluster.isMaster) {
const app = express();
app.get('/', (req, res) => {
[1, 2, 3, 4].map(() => cluster.fork());
const count = [];
cluster.on('message', (worker, message) => {
console.log({
worker: worker.id,
message
});
count.push(true);
if (count.length === 4)
return res.sendStatus(200);
});
});
app.listen(8000,() => console.log('listening on 8000'));
} else if (cluster.isWorker) {
process.send('msg');
process.disconnect();
}
erste Ausgabe:
> curl localhost:8000
> { worker: 4, message: 'msg' }
> { worker: 1, message: 'msg' }
> { worker: 2, message: 'msg' }
> { worker: 3, message: 'msg' }
dann
> curl localhost:8000
{ worker: 5, message: 'msg' }
{ worker: 5, message: 'msg' }
{ worker: 8, message: 'msg' }
{ worker: 8, message: 'msg' }
{ worker: 7, message: 'msg' }
{ worker: 7, message: 'msg' }
{ worker: 6, message: 'msg' }
{ worker: 6, message: 'msg' }
und so weiter ...
Ich kann nicht verstehen, warum dies geschieht.