Websocket starter in Rust with client and server example

Server code for websockets

(server): https://github.com/campbellgoe/rust_websocket_server

use tokio::net::TcpListener;
use tokio_tungstenite::accept_async;
use tokio_tungstenite::tungstenite::protocol::Message;
use anyhow::Result;
use fut…


This content originally appeared on DEV Community and was authored by George O. E. Campbell

Server code for websockets

(server): https://github.com/campbellgoe/rust_websocket_server

use tokio::net::TcpListener;
use tokio_tungstenite::accept_async;
use tokio_tungstenite::tungstenite::protocol::Message;
use anyhow::Result;
use futures_util::{SinkExt, StreamExt};

#[tokio::main]
async fn main() -> Result<()> {
    let addr = "127.0.0.1:8080".to_string();
    let listener = TcpListener::bind(&addr).await?;
    println!("WebSocket server started on ws://{}", addr);

    while let Ok((stream, _)) = listener.accept().await {
        tokio::spawn(handle_connection(stream));
    }

    Ok(())
}

async fn handle_connection(stream: tokio::net::TcpStream) -> Result<()> {
    let mut ws_stream = accept_async(stream).await?;
    println!("WebSocket connection established");

    while let Some(msg) = ws_stream.next().await {
        let msg = msg?;
        if msg.is_text() {
            let received_text = msg.to_text()?;
            println!("Received message: {}", received_text);
            ws_stream.send(Message::Text(received_text.to_string())).await?;
        }
    }

    Ok(())
}

Cargo.toml (server):

[dependencies]
tokio = { version = "1.12", features = ["full"] }
tokio-stream = "0.1"
tokio-tungstenite = "0.23.1"
anyhow = "1.0"
futures-util = "0.3"

Client websocket code

(client): https://github.com/campbellgoe/rust_websocket_client

use tokio_tungstenite::connect_async;
use tokio_tungstenite::tungstenite::protocol::Message;
use anyhow::Result;
use futures_util::{SinkExt, StreamExt};
use url::Url;

#[tokio::main]
async fn main() -> Result<()> {
    let url = Url::parse("ws://127.0.0.1:8080")?;
    let (mut ws_stream, _) = connect_async(url.as_str()).await.expect("Failed to connect");
    println!("WebSocket client connected");

    // Sending a message to the server
    let message = "Hello, Server!";
    ws_stream.send(Message::Text(message.into())).await?;

    // Receiving messages from the server
    while let Some(msg) = ws_stream.next().await {
        match msg? {
            Message::Text(text) => {
                println!("Received message from server: {}", text);
            }
            _ => {}
        }
    }

    Ok(())
}

client Cargo.toml

[dependencies]
tokio = { version = "1.12", features = ["full"] }
tokio-stream = "0.1"
tokio-tungstenite = "0.23.1"
url = "2"
anyhow = "1.0"
futures-util = "0.3"

You could use this as a starting point for your Rust websocket project.


This content originally appeared on DEV Community and was authored by George O. E. Campbell


Print Share Comment Cite Upload Translate Updates
APA

George O. E. Campbell | Sciencx (2024-07-30T21:46:02+00:00) Websocket starter in Rust with client and server example. Retrieved from https://www.scien.cx/2024/07/30/websocket-starter-in-rust-with-client-and-server-example/

MLA
" » Websocket starter in Rust with client and server example." George O. E. Campbell | Sciencx - Tuesday July 30, 2024, https://www.scien.cx/2024/07/30/websocket-starter-in-rust-with-client-and-server-example/
HARVARD
George O. E. Campbell | Sciencx Tuesday July 30, 2024 » Websocket starter in Rust with client and server example., viewed ,<https://www.scien.cx/2024/07/30/websocket-starter-in-rust-with-client-and-server-example/>
VANCOUVER
George O. E. Campbell | Sciencx - » Websocket starter in Rust with client and server example. [Internet]. [Accessed ]. Available from: https://www.scien.cx/2024/07/30/websocket-starter-in-rust-with-client-and-server-example/
CHICAGO
" » Websocket starter in Rust with client and server example." George O. E. Campbell | Sciencx - Accessed . https://www.scien.cx/2024/07/30/websocket-starter-in-rust-with-client-and-server-example/
IEEE
" » Websocket starter in Rust with client and server example." George O. E. Campbell | Sciencx [Online]. Available: https://www.scien.cx/2024/07/30/websocket-starter-in-rust-with-client-and-server-example/. [Accessed: ]
rf:citation
» Websocket starter in Rust with client and server example | George O. E. Campbell | Sciencx | https://www.scien.cx/2024/07/30/websocket-starter-in-rust-with-client-and-server-example/ |

Please log in to upload a file.




There are no updates yet.
Click the Upload button above to add an update.

You must be logged in to translate posts. Please log in or register.