Как реализовать рабочий поток для запроса express при следовании объектно-ориентированному подходу - PullRequest
0 голосов
/ 08 марта 2020

У меня приложение 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 равен нулю. Таким образом, родительский поток публикует какое-то сообщение, но я не могу найти рабочий поток для определенной функциональности в службе. Я могу делать что-то не так. Если кто-то может помочь с тем же.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...