A lightweight, type-safe RPC facade for typescript and a WebWorker and HTTP based implementations.
In main.js
:
import { WorkerRpcClient } from "jsr:@negrel/rpc";
// Create a worker based RpcClient.
const client = new WorkerRpcClient(
new URL("./worker_script.js", import.meta.url),
{ type: "module" },
);
// Remote Procedure Call.
const result = await client.remoteProcedureCall({
name: "doWork",
args: { i: Math.random() },
});
console.log(result);
// Stop worker.
client.terminate();
In worker_script.js
:
import { workerMessageHandler } from "jsr:@negrel/rpc";
self.onmessage = workerMessageHandler({
doWork({ i }) {
console.log("doWork", i);
return i * 2;
},
});
In main.js
:
import { HttpRpcClient } from "jsr:@negrel/rpc";
// Create a worker based RpcClient.
const client = new HttpRpcClient("http://localhost:8000");
// Remote Procedure Call.
const result = await client.remoteProcedureCall({
name: "doWork",
args: { i: Math.random() },
});
console.log(result);
In server.js
:
import { httpServerHandler } from "jsr:@negrel/rpc";
Deno.serve(httpServerHandler({
doWork({ i }) {
console.log("doWork", i);
return i * 2;
},
}));
If you want to contribute to rpc
to add a feature or improve the code contact
me at alexandre@negrel.dev, open an
issue or make a
pull request.
Please give a ⭐ if this project helped you!
MIT © Alexandre Negrel