Skip to content

actionhero/actionhero-socket-server

Repository files navigation

Actionhero Socket Server

test

As of Actionhero v21, the socket server is not included with Actionhero by default. You can add it (this package) via npm install actionhero-socket-server.

As of version 3.0.0 of this package, Actionhero v28+ is required.

❯ telnet localhost 5000
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
{"welcome":"actionhero.welcomeMessage","context":"api"}
randomNumber
{"randomNumber":0.11296216329530862,"stringRandomNumber":"Your random number is 0.11296216329530862","context":"response","messageId":"8778822d-0953-4d0c-9c04-98cd53b53b7d"}
exit
{"status":"Bye","context":"api"}
Connection closed by foreign host.

Installation

  1. Add the package to your actionhero project: npm install actionhero-socket-server --save
  2. Copy the config file into your project cp ./node_modules/actionhero-socket-server/src/config/socket.ts src/config/socket.ts
  3. Enable the plugin:
// in config/plugins.ts
import * as path from "path";

export const DEFAULT = {
  plugins: () => {
    return {
      "actionhero-socket-server": {
        path: path.join(
          __dirname,
          "..",
          "..",
          "node_modules",
          "actionhero-socket-server"
        ),
      },
    };
  },
};
  1. Add a serializer for errors:
// in config/errors.ts
// you are adding config.errors.serializers.socket

socket: error => {
  if (error.message) {
    return String(error.message);
  } else {
    return error;
  }
},

Options

All options are exposed via the config file:

const namespace = "socket";

declare module "actionhero" {
  export interface ActionheroConfigInterface {
    [namespace]: ReturnType<typeof DEFAULT[typeof namespace]>;
  }
}

export const DEFAULT = {
  [namespace]: () => {
    return {
      enabled: true,
      // TCP or TLS?
      secure: false,
      // Passed to tls.createServer if secure=true. Should contain SSL certificates
      serverOptions: {},
      // Port or Socket
      port: 5000,
      // Which IP to listen on (use 0.0.0.0 for all)
      bindIP: "0.0.0.0",
      // Enable TCP KeepAlive pings on each connection?
      setKeepAlive: false,
      // Delimiter string for incoming messages
      delimiter: "\n",
      // Maximum incoming message string length in Bytes (use 0 for Infinite)
      maxDataLength: 0,
    };
  },
};