A binary-only RPC protocol for multiple transports such as WebSocket, WebWorker, HTTP, BLE and so on.


Keywords
microservice, rpc, tcp, thread, typescript, websocket, websockets, worker
License
MIT
Install
npm install @remly/core@0.14.0

Documentation

drpc

An efficient RPC protocol for multiple transports such as TCP, WebSocket, Worker and so on.

Usage

TCP transport

// main.ts
// declare we have @drpc/transport-tcp for app.accept().
import '@drpc/transport-tcp';

import {Application, tcp} from '@drpc/server';

// *******************
// Definitions
// *******************
// definition style 1
class Greeter {
  // or define a const string
  static namespace: 'greeter';

  greet: (name: string) => string;
}

// definition style 2
const GreeterNamespace = 'greeter';

interface Greeter {
  greet: (name: string) => string;
}

// *******************
// Implementations
// *******************
@drpc(Greeter.namespace)
class GreeterImpl implements Greeter {
  @drpc.method()
  greet(name: string) {
    return `Hello, ${name}!`;
  }
}

// server initiation
const greeter = new GreeterImpl();

async function main() {
  // *******************
  // Setup Server
  // *******************
  // prepare applicaiton
  const app = new Application();

  // register all methods of the service with '*' name filter
  app.register(Greeter.namespace, greeter, '*');
  // or according to decorators
  // app.register(greeter);

  // signal every client on connected
  app.on('connection', async connection => {
    await connection.emit('message', 'Welcome');
  });

  // setup server (tcp, websocket or worker)
  const server = net.createServer(app.accept());
  server.listen(3000);

  // *******************
  // Setup Client
  // *******************
  const client = connect('tcp://localhost:3000');
  // subscribe "message" signal
  client.on('message', message => {
    console.log(message); // => Welcome
  });
  const service = client.service<Greeter>(Greeter.namespace);
  // call remote method
  const result = await service.call('greet', ['Tom']);
  console.log(result);

  await client.end();
  await server.stop();

  // =>
  // Welcome
  // Hello, Tom!
}

main().catch(err => {
  console.log(err);
  process.exit(1);
});

Licence

  • Copyright (c) 2021, Yuan Tao (MIT License).