From 51d1d6c0499e8d25a62b7f77b10b381bc219a0b3 Mon Sep 17 00:00:00 2001 From: Markus Schicker Date: Wed, 30 Jul 2025 14:38:17 +0200 Subject: [PATCH] Add BrokerOptions to customize Heartbeat interval and message --- src/broker.ts | 10 +++++++--- src/index.ts | 4 ++-- 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/src/broker.ts b/src/broker.ts index 7ad52b1..824236c 100644 --- a/src/broker.ts +++ b/src/broker.ts @@ -1,10 +1,14 @@ import WebSocket from 'ws'; +export interface BrokerOptions { + heartbeatInterval?: number; // in milliseconds + heartbeatMessage?: string; +} export class Broker { private subsByWsId = new Map(); private subsByChannel = new Map(); - constructor() { + constructor(private options: BrokerOptions = {}) { this.heartbeat(); } @@ -67,13 +71,13 @@ export class Broker { for (const subs of this.subsByWsId.values()) { for (const sub of subs) { try { - sub.send('HEARTBEAT'); + sub.send(this.options.heartbeatMessage || 'HEARTBEAT'); } catch(err) { // continue } } } - setTimeout(() => this.heartbeat(), 120_000); + setTimeout(() => this.heartbeat(), this.options.heartbeatInterval || 120_000); } } diff --git a/src/index.ts b/src/index.ts index bd2531e..e8b81de 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,11 +1,11 @@ import http from 'http'; import WebSocket from 'ws'; import { connect, upgrade } from './webSocket'; -import { Broker } from './broker'; +import { Broker, BrokerOptions } from './broker'; import { consoleLogger, Logger } from './logger'; import * as net from 'net'; -export function createBroker(server: PubSubServer, getChannel: (request: T) => Promise, logger: Logger = consoleLogger): Broker { +export function createBroker(server: PubSubServer, getChannel: (request: T) => Promise, logger: Logger = consoleLogger, options: BrokerOptions = {}): Broker { const wss = new WebSocket.Server({ noServer: true }); const broker = new Broker();