Если вы пропустили сообщение Классы и методы, управляемые веб-воркерами, вот краткое изложение, о котором я мог подумать:

вы можете экспортировать из Worker'а общее пространство имен и использовать 100% асинхронный JS для вызова его методов или даже для создания экземпляров 🎉

но что, если я скажу вам, что могу экспортировать и из NodeJS?

Не так давно я создал модуль под названием node-worker, целью которого было моделировать систему обмена сообщениями Web Workers через NodeJS.

Однако после выпуска workway я понял, что абсолютно хочу, чтобы тот же механизм экспортировал любое пространство имен непосредственно из NodeJS, и что с помощью улучшенной логики Web Worker, подобной логике, я мог бы создать такое гибридное решение сразу же, повторно используя узел . -worker и повторно использовать как можно больше кода workway (что я и сделал, сторона NodeJS использует точно такой же код).

В двух словах

На основе socket.io workway для nodejs из коробки предоставляет все необходимое для удаленного управления всем, что доступно через nodejs.

  • рекурсия поддерживается из коробки
  • вы можете экспортировать модули сразу, как в workway(require('os'))
  • код на стороне клиента идентичен
  • код на стороне сервера использует addEventListener и removeEventListener плюс postMessage для работы, как в реальном Web Worker
  • сервер решает, что выставлять, вы контролируете своих рабочих

Экспресс пример

const path = require('path');
const express = require('express');
const workway = require('workway/node');
// which folder should be reachable from the Web ?
workway.authorize(path.join(__dirname, 'workers'));
// create an app through workway
const app = workway.app(express());
app.use(express.static(path.join(__dirname, 'www')));
app.listen(process.env.PORT || 8080, function () {
  console.log(`http://localhost:${this.address().port}/`);
});

Файл workers/os.js, который будет экспортирован, выглядит примерно так:

const workway = require('workway');
// export any namespace or even modules
workway(require('os'));

Клиентский файл, в котором можно будет бесплатно использовать такого воркера, выглядит примерно так:

workway('node://os.js').then(async ({worker, namespace:os}) => {
  const cpus = await os.cpus();
  // ... the rest of the code ...
});

В этом примере я просто показываю информацию о процессорах и использовании системной памяти, но, по сути, вы ничего не можете сделать с помощью этого модуля!

Вы также можете взять файл .zip и поиграть с ним после npm install.

Случаи применения

Версия модуля nodejs была создана с учетом Интернета вещей, что позволяет производителям делать больше с помощью платформы NodeJS.

Я, например, использую его для игры в моей домашней интрасети, где Raspberry Pi 0 через Wi-Fi дает мне возможность делать все, что я хочу, благодаря своим возможностям NodeJS.

Его архитектура основана на предположении, что вы выбираете, что раскрывать, и сценарии третьих сторон не могут выполнять произвольный код на вашем собственном сервере, но если вы раскрываете критические операции, все может пойти не так, как вас предупреждали.

При этом я надеюсь, что вам понравится эта последняя функция модуля workway!