From 3a3d53e628e43fc303b30fdb5ffc294ab6c84a12 Mon Sep 17 00:00:00 2001 From: Jean-Gabriel Gill-Couture Date: Mon, 14 Jun 2021 17:07:28 -0400 Subject: [PATCH] Prevent trying to open too many connections on the server when the server is closing the websocket on its own --- src/y-websocket.js | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/y-websocket.js b/src/y-websocket.js index 09234493..05476fa9 100644 --- a/src/y-websocket.js +++ b/src/y-websocket.js @@ -113,20 +113,23 @@ const setupWS = provider => { provider.emit('status', [{ status: 'disconnected' }]) - } else { - provider.wsUnsuccessfulReconnects++ + clearTimeout(provider.resetUnsuccessfulReconnects) } + // Start with no reconnect timeout and increase timeout by // log10(wsUnsuccessfulReconnects). // The idea is to increase reconnect timeout slowly and have no reconnect // timeout at the beginning (log(1) = 0) + provider.wsUnsuccessfulReconnects++ setTimeout(setupWS, math.min(math.log10(provider.wsUnsuccessfulReconnects + 1) * reconnectTimeoutBase, maxReconnectTimeout), provider) } websocket.onopen = () => { provider.wsLastMessageReceived = time.getUnixTime() provider.wsconnecting = false provider.wsconnected = true - provider.wsUnsuccessfulReconnects = 0 + provider.resetUnsuccessfulReconnects = setTimeout(() => { + provider.wsUnsuccessfulReconnects = 0 + }, 1000) provider.emit('status', [{ status: 'connected' }]) @@ -207,6 +210,7 @@ export class WebsocketProvider extends Observable { this.wsconnecting = false this.bcconnected = false this.wsUnsuccessfulReconnects = 0 + this.resetUnsuccessfulReconnects = undefined this.messageHandlers = messageHandlers.slice() this.mux = mutex.createMutex() /**