Worker Threads Adapter
Use oRPC for typesafe communication between Node.js Worker Threads via the Message Port Adapter.
Use Node.js Worker Threads with oRPC for typesafe inter-thread communication via the Message Port Adapter.
Worker Thread
Listen for a MessagePort sent from the main thread and upgrade it:
import { parentPort } from 'node:worker_threads'
import { onError } from '@orpc/server'
import { RPCHandler } from '@orpc/server/message-port'
const handler = new RPCHandler(router, {
interceptors: [
onError((error) => {
console.error(error)
}),
],
})
parentPort?.on('message', (message) => {
if (message instanceof MessagePort) {
handler.upgrade(message, {
context: {} // Provide initial context if needed
})
message.start()
}
})
Main Thread
Create a MessageChannel, send one port to the worker thread, and use the other to initialize the client link:
import { MessageChannel, Worker } from 'node:worker_threads'
import { RPCLink } from '@orpc/client/message-port'
const { port1: clientPort, port2: serverPort } = new MessageChannel()
const worker = new Worker(new URL('./some-worker.js', import.meta.url))
worker.postMessage(serverPort, [serverPort])
const link = new RPCLink({
port: clientPort
})
clientPort.start()