Connect A Listener To A Websocket Server In Rust With tokio-tungstenite

This is a cut down version of the client example from the tokio-tungstenite create. It connects to a websocket server and prints any messages it receives to the console.

#!/usr/bin/env cargo +nightly -Zscript

//! ```cargo
//! [dependencies]
//! futures-util = { version = "0.3.28" }
//! tokio = { version = "1.0.0", features = ["full"] }
//! tokio-tungstenite = "*"
//! url = "2.4.1"
//! ```

use futures_util::StreamExt;
use tokio::io::AsyncWriteExt;
use tokio_tungstenite::connect_async;

async fn main() {
    let address = "ws://";
    let url = url::Url::parse(address).unwrap();
    let (ws_stream, _) = connect_async(url).await.expect("Failed to connect");
    let (_, read) = ws_stream.split();
    let ws_to_stdout = {
        read.for_each(|message| async {
            let data = message.unwrap().into_data();
  • The original example read stdin and sent whatever it received to the server. There was a bunch of extra futures stuff invovled in that. I ripped all that out since I just want a listener client

  • I'm still new to async/tokio/futures. This code is working in issolation. I don't know if it would need to be tweaked to work in more complicated coded bases


tokio-tungstenite websocket client example

The base I whittled down to get the example above