https://github.com/actionhero/actionhero-socket-server
A TCP and JSON server for actionhero
https://github.com/actionhero/actionhero-socket-server
Last synced: 4 months ago
JSON representation
A TCP and JSON server for actionhero
- Host: GitHub
- URL: https://github.com/actionhero/actionhero-socket-server
- Owner: actionhero
- Created: 2019-10-26T22:40:43.000Z (over 6 years ago)
- Default Branch: main
- Last Pushed: 2024-10-01T02:44:29.000Z (over 1 year ago)
- Last Synced: 2025-10-09T20:25:17.217Z (8 months ago)
- Language: TypeScript
- Size: 788 KB
- Stars: 4
- Watchers: 1
- Forks: 0
- Open Issues: 3
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Actionhero Socket Server
[](https://github.com/actionhero/actionhero-socket-server/actions/workflows/test.yml)
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.
```shell
❯ 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:
```ts
// 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"
),
},
};
},
};
```
4. Add a serializer for errors:
```ts
// 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:
```ts
const namespace = "socket";
declare module "actionhero" {
export interface ActionheroConfigInterface {
[namespace]: ReturnType;
}
}
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,
};
},
};
```