diff --git a/.changes/reconnect-jitter b/.changes/reconnect-jitter new file mode 100644 index 00000000..11cc00a1 --- /dev/null +++ b/.changes/reconnect-jitter @@ -0,0 +1 @@ +patch type="fixed" "Add jitter to reconnect retry delays" diff --git a/lib/src/core/engine.dart b/lib/src/core/engine.dart index 3f9d02b8..d5c113cb 100644 --- a/lib/src/core/engine.dart +++ b/lib/src/core/engine.dart @@ -15,6 +15,7 @@ // ignore_for_file: deprecated_member_use_from_same_package import 'dart:async'; +import 'dart:math' as math; import 'dart:typed_data' show Uint8List; import 'package:flutter/foundation.dart' show kDebugMode, kIsWeb; @@ -1013,7 +1014,11 @@ class Engine extends Disposable with EventsEmittable { return; } - final delay = defaultRetryDelaysInMs[reconnectAttempts!]; + var delay = defaultRetryDelaysInMs[reconnectAttempts!]; + // Add random jitter to prevent thundering herd on reconnect + if (reconnectAttempts! > 1) { + delay += math.Random().nextInt(1000); + } events.emit(EngineAttemptReconnectEvent( attempt: reconnectAttempts! + 1,