@makecode/worker-manager
v1.0.0
Published
워커 관리
Readme
@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 함수를 실행하고 결과를 반환합니다.
