Skip to content

Commit

Permalink
feat(ws-client): Use BackOff to calculate delays when attempting reco…
Browse files Browse the repository at this point in the history
…nnect
  • Loading branch information
aholstenson committed Jun 7, 2021
1 parent 4ce1c21 commit 2696f9c
Showing 1 changed file with 12 additions and 5 deletions.
17 changes: 12 additions & 5 deletions packages/ws-client/src/WebSocketClientPeer.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
import { AuthProvider, WithNetwork } from 'ataraxia';
import { AuthProvider, BackOff, WithNetwork } from 'ataraxia';
import { DisconnectReason } from 'ataraxia/transport';

import { AbstractWebSocketPeer } from './AbstractWebSocketPeer';
Expand All @@ -8,6 +8,8 @@ export class WebSocketClientPeer extends AbstractWebSocketPeer {
private readonly factory: WebSocketFactory;
private readonly url: string;

private readonly backOff: BackOff;

private connectTimeout: any;

public constructor(
Expand All @@ -20,6 +22,11 @@ export class WebSocketClientPeer extends AbstractWebSocketPeer {

this.factory = factory;
this.url = url;

this.backOff = new BackOff({
delay: 100,
maxDelay: 30000
});
}

protected handleDisconnect(reason: DisconnectReason, err?: Error) {
Expand All @@ -28,10 +35,9 @@ export class WebSocketClientPeer extends AbstractWebSocketPeer {

super.handleDisconnect(reason, err);

// TODO: Smarter back-off algorithm
const retryTime = 30000;
this.debug('Reconnecting in', retryTime, 'ms');
this.connectTimeout = setTimeout(() => this.tryConnect(), retryTime);
const delay = this.backOff.nextDelay();
this.debug('Reconnecting in', delay, 'ms');
this.connectTimeout = setTimeout(() => this.tryConnect(), delay);
}

public tryConnect() {
Expand All @@ -45,6 +51,7 @@ export class WebSocketClientPeer extends AbstractWebSocketPeer {
ws.addEventListener('open', () => {
this.debug('Connected');

this.backOff.reset();
this.negotiateAsClient();
});

Expand Down

0 comments on commit 2696f9c

Please sign in to comment.