Add server.rs example to the examples section

This commit is contained in:
Daniel Abramov 2017-07-28 15:24:16 +02:00
parent e59169989a
commit 41dfc3c506
1 changed files with 38 additions and 0 deletions

38
examples/server.rs Normal file
View File

@ -0,0 +1,38 @@
extern crate tungstenite;
use std::thread::spawn;
use std::net::TcpListener;
use tungstenite::accept;
use tungstenite::handshake::server::Request;
fn main() {
let server = TcpListener::bind("127.0.0.1:3012").unwrap();
for stream in server.incoming() {
spawn(move || {
let callback = |req: &Request| {
println!("Received a new ws handshake");
println!("The request's path is: {}", req.path);
println!("The request's headers are:");
for &(ref header, _ /* value */) in req.headers.iter() {
println!("* {}", header);
}
// Let's add an additional header to our response to the client.
let extra_headers = vec![
(String::from("MyCustomHeader"), String::from(":)")),
(String::from("SOME_TUNGSTENITE_HEADER"), String::from("header_value")),
];
Ok(Some(extra_headers))
};
let mut websocket = accept(stream.unwrap(), Some(Box::new(callback))).unwrap();
loop {
let msg = websocket.read_message().unwrap();
if msg.is_binary() || msg.is_text() {
websocket.write_message(msg).unwrap();
}
}
});
}
}