From 8dd7ef2f0b60f62ce625d03d03c2ed9bd2f9835d Mon Sep 17 00:00:00 2001 From: mxve <68632137+mxve@users.noreply.github.com> Date: Sat, 31 May 2025 20:47:06 +0200 Subject: [PATCH] [cdn] prefer lower latency; rate global 1.4x, same region 1.3x --- src/cdn.rs | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/cdn.rs b/src/cdn.rs index a4921e3..ea395d5 100644 --- a/src/cdn.rs +++ b/src/cdn.rs @@ -167,14 +167,12 @@ impl Server { } let distance_km = user_region.distance_to(self.region); - let region_multiplier = if distance_km == 0.0 { + let region_multiplier = if self.region == Region::Global { + 1.4 + } else if distance_km == 0.0 { 1.3 } else if user_region == Region::Unknown { - if self.region == Region::Global { - 1.1 - } else { - 1.0 - } + 1.0 } else if distance_km <= 2000.0 { 1.25 } else if distance_km <= 5000.0 { @@ -232,13 +230,15 @@ impl Hosts { return false; } - // find best host by rating, fifo if equal - if let Some((idx, _)) = self - .servers - .iter() - .enumerate() - .max_by_key(|(idx, server)| (server.rating, -(*idx as i32))) - { + // find best host by rating, then by latency + if let Some((idx, _)) = self.servers.iter().enumerate().max_by_key(|(_, server)| { + ( + server.rating, + server + .latency + .map_or(0, |l| u64::MAX - l.as_millis() as u64), + ) + }) { let server = &self.servers[idx]; *CURRENT_CDN.lock().unwrap() = Some(Arc::new(*server)); *self.active_index.write().unwrap() = Some(idx);