Если вы пропустили сообщение Классы и методы, управляемые веб-воркерами, вот краткое изложение, о котором я мог подумать:
вы можете экспортировать из 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!