У меня приложение express, и я следую объектно-ориентированному подходу. Поэтому, когда приходит запрос API, он вызывает функцию контроллера, а через контроллер я вызываю сервисный лог c. Например, ->
class Controller {
constructor() {
this.service = new Service();
}
serveRequest() {
const worker = new Worker('./service.js');
worker.once('exit', () => {
this.emit(`worker ${worker.threadId} terminated`);
});
const {port1, port2} = new MessageChannel();
worker.postMessage({port: port1}, [port1]);
port2.once('message', (result) => {
//send response;
});
port2.once('error', (err) => {
throw err
});
}
}
module.exports = Controller;
. js
class Service {
constructor() {
}
async get() {
if(!isMainThread) {
parentPort.on('message', async ({data, port}) => {
const result = //do some work
port.postMessage(result);
});
}
}
}
module.exports = Service;
Мне удалось получить код службы, но он всегда работает в главном потоке, а parentPort равен нулю. Таким образом, родительский поток публикует какое-то сообщение, но я не могу найти рабочий поток для определенной функциональности в службе. Я могу делать что-то не так. Если кто-то может помочь с тем же.