Function socket_flow::server::start_server
source ยท pub async fn start_server(port: u16) -> Result<EventStream, Error>Expand description
A ready to use websockets server
This method is used to spawn a websockets server with just several lines of code.
Accepts as argument that port, where the server will be running, and returns an EventStream.
Which implements Stream trait, being capable of processing a stream of events sequentially
notifying the end-user, about new client connections, disconnections, messages and errors.
Examples found in repository?
examples/simple_server.rs (line 13)
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
async fn main() {
env_logger::init();
let port: u16 = 8080;
match start_server(8080).await {
Ok(mut event_receiver) => {
let mut clients: HashMap<ID, WSWriter> = HashMap::new();
info!("Server started on address 127.0.0.1:{}", port);
while let Some(event) = event_receiver.next().await {
match event {
Event::NewClient(id, client_conn) => {
info!("New client {} connected", id);
clients.insert(id, client_conn);
}
Event::NewMessage(client_id, message) => {
info!("Message from client {}: {:?}", client_id, message);
let ws_writer = clients.get_mut(&client_id).unwrap();
ws_writer.send_message(message).await.unwrap();
}
Event::Disconnect(client_id) => {
info!("Client {} disconnected", client_id);
clients.remove(&client_id);
}
Event::Error(client_id, error) => {
error!("Error occurred for client {}: {:?}", client_id, error);
}
}
}
}
Err(err) => {
eprintln!("Could not start the server due to: {:?}", err);
}
}
}