Я довольно новичок в Node.JS / Cluster / Express. Я играл со всем этим персоналом и пытался выполнить одну конкретную задачу. Я хочу, чтобы каждый маршрут (например, прямо сейчас у меня был пользователь) запускался на отдельном работнике.
Сейчас у меня все маршруты выполняются на одном работнике, и они взаимодействуют со службами (службами в разных дочерних процессах).
const cluster = require('cluster');
const express = require('express');
const bodyParser = require('body-parser');
const childProcess = require('child_process');
const morgan = require('morgan');
const numCPUs = require('os').cpus().length;
const usersRoute = require('./routes/users');
const app = express();
const PORT = 8080;
if (cluster.isMaster) {
const usersWorker = childProcess.fork('./services/users');
for (let i = 0; i < numCPUs; i ++) {
let worker = cluster.fork().process;
console.log(`Worker with ${worker.pid} started...`);
}
cluster.on('disconnect', (worker) => {
console.error(`Worker ${worker.id} died...`);
let newWorker = cluster.fork().process;
console.log(`New worker ${newWorker.pid} created...`);
});
cluster.on('online', (worker) => {
console.log(`Worker ${worker.id} is online...`);
worker.on('message', (message) => {
switch (message.type) {
case 'users':
usersWorker.send(message);
usersWorker.on('message', (msg) => {
worker.send(msg);
});
}
});
});
} else {
app.use(morgan('tiny'));
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use('/users', usersRoute);
app.listen(PORT, () => console.log(`I'm running on port ${PORT}. You are welcome!`));
}
и простой маршрут:
const express = require('express');
const router = express.Router();
router.get('/', (req, res) => {
console.log(`Users worker ${process.pid}`)
process.send({
type: 'users',
body: 'Hello from users'
});
process.on('message', (message) => {
console.log(message);
return res.json(message);
});
});
module.exports = router;
так что мои пользователи srv выглядят так, ничего особенного:
process.on('message', (message) => {
console.log(`Worker ${process.pid} is here...`);
const obj = {};
obj.route = message;
obj.service = process.pid;
console.log('Gonna send this');
console.log(obj);
process.send(obj);
});
есть ли у меня варианты, как я могу прикрепить определенный маршрут к конкретному работнику?
Заранее спасибо!