Regularly send pings

Signed-off-by: Marcel Müller <neikos@neikos.email>
This commit is contained in:
Marcel Müller 2026-02-11 11:21:56 +01:00
parent 82a8418b82
commit 0af3def21f

View file

@ -12,7 +12,7 @@ use clap::Parser;
use dashmap::DashMap; use dashmap::DashMap;
use futures::{SinkExt, StreamExt}; use futures::{SinkExt, StreamExt};
use serde::{Deserialize, Serialize}; use serde::{Deserialize, Serialize};
use std::{net::SocketAddr, path::PathBuf, sync::Arc}; use std::{net::SocketAddr, path::PathBuf, sync::Arc, time::Duration};
use tokio::sync::broadcast; use tokio::sync::broadcast;
use tower_http::cors::CorsLayer; use tower_http::cors::CorsLayer;
use tracing::{info, warn}; use tracing::{info, warn};
@ -386,12 +386,27 @@ async fn handle_socket(socket: WebSocket, state: Arc<AppState>, peer_ip: String)
// Task to forward broadcast messages to this peer's websocket // Task to forward broadcast messages to this peer's websocket
let mut send_task = tokio::spawn(async move { let mut send_task = tokio::spawn(async move {
while let Ok(msg) = rx.recv().await { loop {
let timer = tokio::time::sleep(Duration::from_secs(1));
tokio::select! {
msg = rx.recv() => {
if let Ok(msg) = msg {
let text = serde_json::to_string(&msg).unwrap(); let text = serde_json::to_string(&msg).unwrap();
if sender.send(Message::Text(text.into())).await.is_err() { if sender.send(Message::Text(text.into())).await.is_err() {
break; break;
} }
} else {
break
} }
}
_ = timer => {
if sender.send(Message::Ping(Default::default())).await.is_err() {
break;
}
}
}
}
}); });
// Task to handle incoming messages from this peer // Task to handle incoming messages from this peer