use std::net::TcpListener; use std::thread::spawn; use tungstenite::accept_hdr; use tungstenite::handshake::server::{Request, Response}; fn main() { env_logger::init(); let server = TcpListener::bind("127.0.0.1:3012").unwrap(); for stream in server.incoming() { spawn(move || { let callback = |req: &Request, mut response: Response| { println!("Received a new ws handshake"); println!("The request's path is: {}", req.uri().path()); println!("The request's headers are:"); for (ref header, _value) in req.headers() { println!("* {}", header); } // Let's add an additional header to our response to the client. let headers = response.headers_mut(); headers.append("MyCustomHeader", ":)".parse().unwrap()); headers.append("SOME_TUNGSTENITE_HEADER", "header_value".parse().unwrap()); Ok(response) }; let mut websocket = accept_hdr(stream.unwrap(), callback).unwrap(); loop { let msg = websocket.read_message().unwrap(); if msg.is_binary() || msg.is_text() { websocket.write_message(msg).unwrap(); } } }); } }