0.0.5 • Published 10 months ago

mrpc-web v0.0.5

Weekly downloads
-
License
MIT
Repository
github
Last release
10 months ago

mrpc-web

A basic RPC wrapper around protobuf and websockets to facilitate writing web services and apps.

Features include:

  • Uses proto3 to define services/messages
  • Uses websockets for transport
  • Friendly interfaces to define services/clients

This library is meant to be used in web pages running in a browser, to use this in a nodejs runtime see mprc-node.

Usage

Code Generation

mRPC's typescript integration is built around ts-proto generated interfaces and types.

First, add that to your project:

yarn add --dev ts-proto

and install the protobuf compiler so you have the protoc command. Then, you can use these to generate typescript bindings for use with mRPC:

protoc \
  --plugin=protoc-gen-ts_proto=./node_modules/.bin/protoc-gen-ts_proto \
  --ts_proto_out=./src/gen \
  --ts_proto_opt=env=browser,outputServices=generic-definitions,outputServices=default \
  --proto_path=../proto \
  ../proto/*.proto

Put that in a bash script for convenience to quickly update the typescript whenever you change the .proto files.

Writing Clients

Once you have the generated ts-proto types, you can simply import them, import the mrpc-web library, create an RpcClientChannel around a hostname or a Socket object, and pass that into a ___ClientImpl's constructor:

import { RpcClientChannel } from "netrpc-web";
// Generated from an example helloworld.proto
import {
  GreeterClientImpl,
  Greeter,
} from "./gen/helloworld"

const channel = new RpcClientChannel({host: 'http://localhost:8080'});
const client = new GreeterClientImpl(channel);
...
const result = await client.SayHello({name: "Alice"});

You can also write services in the Browser - simply wrap a socket that was previously connected and the Server can now act as a client to the webpage.

See https://github.com/maunvz/mRPC/tree/main/samples for a full example of a server/client nodejs command line.