Complete these tasks to reinforce what you learned in this module.
Create an axum route GET /ws that accepts a WebSocket upgrade. Use WebSocketUpgrade extractor and return ws.on_upgrade(|socket| async move {}). In the upgrade handler, do nothing (or close immediately). Run the server on 3000.
WebSocketUpgrade extractor; return the result of calling .on_upgrade() with a closure that receives the socket. Register the handler with get(ws) on /ws.// Task 1: WebSocket upgrade. See tasks/TASKS.md.
fn main() {
todo!("GET /ws with WebSocketUpgrade, on_upgrade");
}
In the WebSocket upgrade handler, split the socket into sender and receiver. In a loop, receive messages with receiver.next().await and send each message back with sender.send(msg).await. Use futures_util::{SinkExt, StreamExt}. Break on send error or when stream ends.
StreamExt and SinkExt from futures_util.// Task 2: Echo WebSocket. See tasks/TASKS.md.
fn main() {
todo!("Receive and send back messages in WebSocket handler");
}