1.0.0 • Published 12 months ago

@makecode/worker-manager v1.0.0

Weekly downloads
-
License
MIT
Repository
-
Last release
12 months ago

@makecode/worker-manager

@makecode/worker-manager는 Node.js 및 브라우저 환경에서 쉽게 사용할 수 있는 Queryable Worker Manager 라이브러리입니다. 이 라이브러리는 Worker와 메시지 핸들링을 간단하게 설정하고 사용할 수 있도록 도와줍니다.

설치

npm install @makecode/worker-manager

또는

yarn add @makecode/worker-manager

주요 기능

  • 브라우저와 Node.js 환경 모두 지원
  • Worker 메시지 핸들링
  • queryable 객체를 통해 Worker 내부에서 함수 호출 가능
  • Worker 파일 내부 실행 함수가 동기/비동기 경우, 응답 후 결과 실행 보장할 수 있음

사용 방법

브라우저 환경에서 사용하기

import { createCodeBlockURL, QueryableWorker } from '@makecode/worker-manager';

// Worker 스크립트
const codeURL = createCodeBlockURL`
  const globalContext =
    typeof global !== 'undefined'
      ? global // Node.js 환경
      : typeof self !== 'undefined'
        ? self // Web Worker 환경
        : this;

  const queryable = {
    hello(name) {
      return `Hello, ${name}!`;
    },
    world(payload) {
      return new Promise((resolve, reject) => {
        const numberRandom = (max=1, min=0) => {
          if(min >= max) {
            return max;
          }
          return Math.floor(Math.random() * (max - min) + min);
        }
        const seconds = numberRandom(9000, 1000);
        setTimeout(() => {
          resolve([seconds, payload]);
        }, seconds);
      });
    }
  };

  globalContext.onmessage = async (data, postMessage) => {
    const { query, payload } = data;
    const result = await queryable[query]?.(...payload);
    postMessage({ query, result });
  };
`;

//const blob = new Blob([workerScript], { type: 'application/javascript' });
//const codeURL = URL.createObjectURL(blob);
const worker = new QueryableWorker(codeURL, {
  workerOptions: { type: 'module' },
  onMessage: message =>
    console.log('exampleCodeBlockURL', '워커로부터의 메시지', message),
  onError: error => console.error('exampleCodeBlockURL', '워커 오류', error),
});
worker.connect(); // 워커 연결
worker.addListener('hello', event =>
  console.log(
    'exampleCodeBlockURL',
    '워커 동기 실행 함수 결과 수신',
    event.detail,
  ),
);
worker.addListener('world', event =>
  console.log(
    'exampleCodeBlockURL',
    '워커 비동기 실행 함수 결과 수신',
    event.detail,
  ),
);

// 쿼리 형태가 아닌 경우
worker.postMessage('일반 메시지 워커로 전달!');

// 쿼리 형태 전송, 비동기 (호출순서에 따른 응답 실행순서 비보장)
worker.postQuery('hello', 2, 1);

// 쿼리 형태 전송, 동기 (호출순서에 따른 응답 실행순서 보장)
worker.postQuerySync('world', 'test1');
worker.postQuerySync('world', 'test2');
worker.postQuerySync('world', 'test3');
worker.postQuerySync('world', 'test4');

Node.js 환경에서 사용하기

...

API

QueryableWorker

Worker 인스턴스 생성, 순서 제어 등

createCodeBlockURL

code string > blob > URL

createCodeBlockURL; Tagged templates 사용

queryable

Worker 내부에서 정의되는 함수 집합입니다. 각 함수는 문자열로 호출될 수 있으며, payload를 매개변수로 받습니다.

queryableMessageHandler

메시지를 처리하는 핸들러로, Worker에서 수신된 데이터를 기반으로 적절한 queryable 함수를 실행하고 결과를 반환합니다.

1.0.0

12 months ago