diff --git a/package-lock.json b/package-lock.json index f35ada1..6a28c2c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@joshbetz/memcached", - "version": "1.2.3", + "version": "1.3.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@joshbetz/memcached", - "version": "1.2.3", + "version": "1.3.0", "license": "MIT", "dependencies": { "generic-pool": "^3.9.0", diff --git a/package.json b/package.json index 532ee7b..e21091a 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@joshbetz/memcached", - "version": "1.2.3", + "version": "1.3.0", "description": "Memcached client for modern Node JS", "main": "build/index.js", "types": "build/index.d.ts", diff --git a/src/hashpool.ts b/src/hashpool.ts index ccda73d..ff5acb1 100644 --- a/src/hashpool.ts +++ b/src/hashpool.ts @@ -4,6 +4,7 @@ const HashRing = require( 'hashring' ); export type HashPoolOptions = { retry: ( retries: number ) => number; + pingInterval: number; } & PoolOptions; type PoolNode = { @@ -32,6 +33,7 @@ export default class HashPool extends EventEmitter { // exponential backoff up to 30 seconds return Math.min( exp, 30000 ); }, + pingInterval: 60_000, // Pool options max: 10, @@ -51,6 +53,12 @@ export default class HashPool extends EventEmitter { for ( const node of nodes ) { this.connect( node ); } + + if ( this.opts.pingInterval > 0 ) { + setInterval( () => { + this.ping(); + }, this.opts.pingInterval ).unref(); + } } connect( node: string ) { diff --git a/test-hashpool.js b/test-hashpool.js index d14db51..a4d9e69 100644 --- a/test-hashpool.js +++ b/test-hashpool.js @@ -5,7 +5,7 @@ async function sleep( ms ) { } async function main() { - const memcached = new HashPool( [ 'localhost:11211', 'localhost:11311' ] ); + const memcached = new HashPool( [ 'localhost:11211', 'localhost:11311' ], { pingInterval: 1000 } ); while ( true ) { try { const key = 'test';