# message-rpc

> A small utility to wrap node.js message passing with an RPC interface

Latest version **0.0.5** (published 2020-05-15) · MIT license · 0 weekly downloads

## Install

```sh
npm install message-rpc
pnpm add message-rpc
yarn add message-rpc
bun add message-rpc
```

## Health

**Score 25/100 (F)** — status: abandoned.

Positive: has types; no vulnerabilities; high quality score.

Warnings: low downloads; no esm support; pre 1.0.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 0.0.5 |
| Published | 2020-05-15 |
| First published | 2020-05-15 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | CommonJS |
| Dependencies | 2 |
| Unpacked size | 25.1 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| Author | Sharon |
| Maintainers | mosho |
| Keywords | node, cluster, rpc |

## Links

- npm: https://www.npmjs.com/package/message-rpc
- npm.io page: https://npm.io/package/message-rpc

## Dependencies (2)

- [object-hash](https://npm.io/package/object-hash.md) ^2.0.3
- [string-hash](https://npm.io/package/string-hash.md) ^1.1.3

## Alternatives

- [@expo/fingerprint](https://npm.io/package/@expo/fingerprint.md) — 6.2M weekly downloads
- [@azure/monitor-opentelemetry-exporter](https://npm.io/package/@azure/monitor-opentelemetry-exporter.md) — 850.0K weekly downloads
- [@azure/monitor-opentelemetry](https://npm.io/package/@azure/monitor-opentelemetry.md) — 624.0K weekly downloads
- [@posthog/ai](https://npm.io/package/@posthog/ai.md) — 423.3K weekly downloads
- [fakefilter](https://npm.io/package/fakefilter.md) — 63.9K weekly downloads

## Recent versions

- 0.0.5 (latest) — 2020-05-15
- 0.0.4 — 2020-05-15
- 0.0.3 — 2020-05-15
- 0.0.2 — 2020-05-15
- 0.0.1 — 2020-05-15

## README

![License](https://img.shields.io/github/license/srolel/message-rpc)
![Build](https://img.shields.io/github/workflow/status/srolel/message-rpc/CI/master)
![Coverage](https://img.shields.io/codecov/c/github/srolel/message-rpc)

# message-rpc

A small, type-safe, convenient RPC wrapper around node.js message passing. Based on a minimal EventEmitter-like interface, and mainly intended for use with the native cluster module.

Requires Node.js >= 6.0.0

[docs](/docs/globals.md)

## Examples

### Worker to master

```typescript
type Eventing = {
  response2xx(): void;
  response4xx(): void;
  response5xx(reason: string): void;
};

const eventingRPC = new MessageRPC<Eventing>({
  // Can implement any methods during instantiation or later (or never!)
  response5xx(reason: string): void {
    console.log(`Worker ${this.id} returned a 5xx response: ${reason}`);
  },
});

if (cluster.isMaster) {
  eventingRPC.extend({
    response2xx(): void {
      console.log(`Worker ${this.id} returned a 2xx response!`);
      someGlobalMetricsCollecter.response2xxCounter++;
    },
  });

  const workers = [cluster.fork(), cluster.fork()];

  // The RPC implementation will receive messages from both workers
  workers.forEach(worker => eventingRPC.register(worker));
} else {
  // In the worker, serving requests with an express app
  const client = eventingRPC.client();

  app.use((err, req, res, next) => {
    if (err) {
      eventingRPC.response5xx(err.message);
      res.sendStatus(500);
    } else {
      eventingRPC.response2xx();
      res.send('something');
    }
  });

  app.listen(8080);
}
```

### Master to worker

```typescript
type Eventing = {
  processMessage(message: string): void;
};

const eventingRPC = new MessageRPC<Eventing>();

if (cluster.isMaster) {
  const workers = [cluster.fork(), cluster.fork()];

  const clients = workers.map(worker => eventingRPC.client(worker));

  messages.forEach((message, i) => {
    // Round robin
    clients[i % clients.length].processMessage(message);
  });
} else {
  // In the worker
  eventingRPC.extend({
    processMessage(message: string) {
      doSomething(message);
    },
  });

  // The RPC implementation will receive messages from the master node
  eventingRPC.register();
}
```

---
_Source: https://npm.io/package/message-rpc · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
