@hoobs/ipc

A library for local inter process communications on unix based systems.

Usage no npm install needed!

<script type="module">
  import hoobsIpc from 'https://cdn.skypack.dev/@hoobs/ipc';
</script>

README

IPC

A library for local interprocess communications on unix based systems.

Installation

You can install this module into your project.

yarn add @hoobs/ipc

Options

Options for creating an IPC server or client.

import { IPCOptions } from "@hoobs/ipc";

const options: IPCOptions = {
    id: "test",
    root: "./",
    namespace: "example",
    encoding: "utf8",
    maxConnections: 100,
}

The example above creates a sock file example.test.sock in the application's root.

variable Required description
id Yes a unique name for the socket
root No the path to store the Unix sock file, default is the app root
namespace No adds a domain to the sock files
encoding No text encoding for socket messages, default is utf8
maxConnections No this is the max number of connections allowed to a socket, default is 100 (server only)

Server

Below is an example of a server implantation.

There are two types listeners;

  • Event
  • Route

Events are designed as void functions, where routes return a payload. Routes accept a path, parameters, and a body. Both requests and results are JSON objects.

import { IPCServer } from "@hoobs/ipc";

const server = new IPCServer({
    id: "test",
    maxConnections: 100,
});

// EVENTS
server.on("host", (data) => {
    console.log(data);
});

// ROUTES
server.route("hello", (request, response) => {
    response.send({
        message: `Hello ${request?.params?.name}`,
    });
});

server.start();

Client

The client can access a server's events and routes. Below is an example of a client implantation.

The two methods are;

  • Emit
  • Fetch

Emit sends a request to the server and doesn't expect a result. Fetch works much like HTTP calls. You need to define the route using the path parameter, and excepts parameters and a body object. Fetch is a promise, so it needs to be called with await or using the then method.

import { IPCClient } from "@hoobs/ipc";

const client = new IPCClient({
    id: "test",
});

// EVENTS
client.emit("host", {
    ip: "127.0.0.1",
});

// ROUTES
client.fetch("hello", {
    name: "Luke Skywalker",
}).then((response) => {
    console.log(response);
});

Legal

This is a modified project orginally wrote by Brandon Nozaki Miller.

HOOBS and the HOOBS logo are registered trademarks of HOOBS Inc. Copyright (C) 2021 HOOBS Inc. All rights reserved.