@zlepper/worker-threads-rpc
TypeScript icon, indicating that this package has built-in type declarations

0.0.10 • Public • Published

@zlepper/worker-threads-rpc

Provides a connection implementation for NodeJS' worker_threads.

Installation

First install the library:

npm install --save @zlepper/rpc @zlepper/worker-threads-rpc

Usage

This sample shows how to implement a simple calculator that runs in a worker thread.

Start by creating the actual class that has the logic that should be run in your worker:

// calculator.ts
export class Calculator {
  public add(a: number, b: number): number {
    return a + b;
  }
  
  public subtract(a: number, b: number): number {
    return a - b;
  }
}

Next create the worker initialization code:

// worker.ts
import { startWorkerProvider } from '@zlepper/rpc';
import { WorkerThreadServerConnection } from '@zlepper/worker-threads-rpc';
import { parentPort } from 'worker_threads';
import { Calculator } from './calculator';

// Check if we actually are in a worker thread. (Required to satisfy TypeScript strict null checks. 
// You can leave this out if you don't use TypeScript or don't have strict null checks enabled.
if (parentPort) {
// Create a wrapper around the connection. The specific wrapper class
// depends on which worker model you are using.
  const connection = new WorkerThreadServerConnection(parentPort);
// Then provide the actual class you want to wrap.
  startWorkerProvider(new Calculator(), connection);
}

Lastly in your main thread: Start the worker and connect to it:

// main.ts
import { wrapBackgroundService } from '@zlepper/rpc';
import { WorkerThreadClientConnection } from '@zlepper/worker-threads-rpc';
import { Worker } from 'worker_threads';
import { Calculator } from './calculator';

// First start the worker itself
const workerThread = new Worker('./worker.js');

// Wrap the connection, the class is again specific to the worker model 
// you wish to use. 
const connection = new WorkerThreadClientConnection(workerThread);

// Lastly access the wrapped "instance" of your class. 
const wrapper = wrapBackgroundService<Calculator>(connection);

console.log(await wrapper.add(1, 2)); // Logs '3'
console.log(await wrapper.subtract(2, 1)); // Logs '1'

Also check the full sample here.

Readme

Keywords

none

Package Sidebar

Install

npm i @zlepper/worker-threads-rpc

Weekly Downloads

7

Version

0.0.10

License

none

Unpacked Size

7.02 kB

Total Files

14

Last publish

Collaborators

  • zlepper