fix: attempt to stop spamming websocket
socket needs major fixes because of weird tokio stuff
This commit is contained in:
parent
93c4093620
commit
3a12c0ee6c
3 changed files with 41 additions and 21 deletions
|
@ -48,7 +48,6 @@ pub async fn handle_socket(socket: WebSocket, state: State, channel_id: usize) {
|
|||
while let Ok(message) = receiver.recv() {
|
||||
if message == "Close" {
|
||||
let _ = sink.close().await;
|
||||
drop(receiver);
|
||||
break;
|
||||
}
|
||||
|
||||
|
@ -56,20 +55,21 @@ pub async fn handle_socket(socket: WebSocket, state: State, channel_id: usize) {
|
|||
break;
|
||||
}
|
||||
}
|
||||
|
||||
drop(receiver);
|
||||
drop(sink);
|
||||
});
|
||||
|
||||
// ping
|
||||
let ping_sender = sender.clone();
|
||||
let mut heartbeat_task = tokio::spawn(async move {
|
||||
let mut heartbeat = tokio::time::interval(Duration::from_secs(30));
|
||||
let mut heartbeat = tokio::time::interval(Duration::from_secs(10));
|
||||
|
||||
loop {
|
||||
while ping_sender.send("Ping".to_string()).is_ok() {
|
||||
heartbeat.tick().await;
|
||||
if ping_sender.send("Ping".to_string()).is_err() {
|
||||
// remote has abandoned us
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
drop(ping_sender);
|
||||
});
|
||||
|
||||
// ...
|
||||
|
@ -168,6 +168,8 @@ pub async fn handle_socket(socket: WebSocket, state: State, channel_id: usize) {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
drop(recv_sender);
|
||||
});
|
||||
|
||||
// forward messages from redis to the mpsc
|
||||
|
@ -176,14 +178,14 @@ pub async fn handle_socket(socket: WebSocket, state: State, channel_id: usize) {
|
|||
let mut pubsub = con.as_pubsub();
|
||||
pubsub.subscribe(channel_id).unwrap();
|
||||
|
||||
loop {
|
||||
while let Ok(msg) = pubsub.get_message() {
|
||||
// payload is a stringified SocketMessage
|
||||
if send_task_sender.send(msg.get_payload().unwrap()).is_err() {
|
||||
break;
|
||||
}
|
||||
while let Ok(msg) = pubsub.get_message() {
|
||||
// payload is a stringified SocketMessage
|
||||
if send_task_sender.send(msg.get_payload().unwrap()).is_err() {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
drop(send_task_sender);
|
||||
});
|
||||
|
||||
// ...
|
||||
|
@ -211,8 +213,20 @@ pub async fn handle_socket(socket: WebSocket, state: State, channel_id: usize) {
|
|||
send_task.abort();
|
||||
forward_task.abort();
|
||||
heartbeat_task.abort();
|
||||
},
|
||||
}
|
||||
};
|
||||
|
||||
// kill
|
||||
drop(sender);
|
||||
drop(db);
|
||||
|
||||
send_task.abort();
|
||||
recv_task.abort();
|
||||
forward_task.abort();
|
||||
heartbeat_task.abort();
|
||||
|
||||
let _ = close_sender.send("Close".to_string());
|
||||
tracing::info!("socket terminate");
|
||||
}
|
||||
|
||||
pub async fn create_request(
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue