1 use std::{net::TcpListener, thread::spawn}; 2 3 use tungstenite::{ 4 accept_hdr, 5 handshake::server::{Request, Response}, 6 }; 7 main()8 fn main() { 9 env_logger::init(); 10 let server = TcpListener::bind("127.0.0.1:3012").unwrap(); 11 for stream in server.incoming() { 12 spawn(move || { 13 let callback = |req: &Request, mut response: Response| { 14 println!("Received a new ws handshake"); 15 println!("The request's path is: {}", req.uri().path()); 16 println!("The request's headers are:"); 17 for (ref header, _value) in req.headers() { 18 println!("* {}", header); 19 } 20 21 // Let's add an additional header to our response to the client. 22 let headers = response.headers_mut(); 23 headers.append("MyCustomHeader", ":)".parse().unwrap()); 24 headers.append("SOME_TUNGSTENITE_HEADER", "header_value".parse().unwrap()); 25 26 Ok(response) 27 }; 28 let mut websocket = accept_hdr(stream.unwrap(), callback).unwrap(); 29 30 loop { 31 let msg = websocket.read().unwrap(); 32 if msg.is_binary() || msg.is_text() { 33 websocket.send(msg).unwrap(); 34 } 35 } 36 }); 37 } 38 } 39