You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
async-tungstenite/examples/autobahn-server.rs

43 lines
1.3 KiB

use futures::{Future, Stream};
use log::*;
use tokio::net::TcpListener;
use tokio_tungstenite::{accept_async, tungstenite::Error as WsError};
fn main() {
env_logger::init();
let mut runtime = tokio::runtime::Builder::new().build().unwrap();
let addr = "127.0.0.1:9002".parse().unwrap();
let socket = TcpListener::bind(&addr).unwrap();
info!("Listening on: {}", addr);
let srv = socket
.incoming()
.map_err(Into::into)
.for_each(move |stream| {
let peer = stream
.peer_addr()
.expect("connected streams should have a peer address");
info!("Peer address: {}", peer);
accept_async(stream).and_then(move |ws_stream| {
info!("New WebSocket connection: {}", peer);
let (sink, stream) = ws_stream.split();
let job = stream
.filter(|msg| msg.is_text() || msg.is_binary())
.forward(sink)
.and_then(|(_stream, _sink)| Ok(()))
.map_err(|err| match err {
WsError::ConnectionClosed => (),
err => info!("WS error: {}", err),
});
tokio::spawn(job);
Ok(())
})
});
runtime.block_on(srv).unwrap();
}