in lib/src/server_cache.dart [102:139]
void _reconnect([int retryTimeoutMs = _connectionRetryBaseMs]) {
if (_isShutdown) {
return;
}
log.info('$_logPrefix: reconnecting to $redisUri...');
var nextRetryMs = retryTimeoutMs;
if (retryTimeoutMs < _connectionRetryMaxMs / 2) {
// 1 <= (randomSource.nextDouble() + 1) < 2
nextRetryMs = (retryTimeoutMs * (randomSource.nextDouble() + 1)).toInt();
}
(redisUri.hasPort
? connectSocket(redisUri.host, port: redisUri.port)
: connectSocket(redisUri.host))
.then((newConnection) {
log.info('$_logPrefix: Connected to redis server');
_setUpConnection(newConnection);
// If the client disconnects, discard the client and try to connect again.
newConnection.outputSink.done.then((_) {
_resetConnection();
log.warning('$_logPrefix: connection terminated, reconnecting');
_reconnect();
}).catchError((e) {
_resetConnection();
log.warning(
'$_logPrefix: connection terminated with error $e, reconnecting');
_reconnect();
});
})
.timeout(const Duration(milliseconds: _connectionRetryMaxMs))
.catchError((_) {
log.severe(
'$_logPrefix: Unable to connect to redis server, reconnecting in ${nextRetryMs}ms ...');
Future<void>.delayed(Duration(milliseconds: nextRetryMs)).then((_) {
_reconnect(nextRetryMs);
});
});
}