WebSocket Upgrade in Axum
use axum::extract::ws::{WebSocketUpgrade, WebSocket, Message};
async fn ws_handler(
ws: WebSocketUpgrade,
State(state): State<AppState>,
) -> impl IntoResponse {
ws.on_upgrade(|socket| handle_socket(socket, state))
}
async fn handle_socket(mut socket: WebSocket, state: AppState) {
loop {
match socket.recv().await {
Some(Ok(Message::Text(text))) => {
if socket.send(Message::Text(text)).await.is_err() { break; }
}
Some(Ok(Message::Ping(data))) => {
socket.send(Message::Pong(data)).await.ok();
}
_ => break,
}
}
}