Jamsocket is a lightweight framework for building WebSocket-based application backends.

Overview

Jamsocket Logo

Jamsocket

crates.io docs.rs docs-latest wokflow state wokflow state

Jamsocket is a lightweight framework for building services that are accessed through WebSocket connections.

Services can either be native Rust code that runs in the server process, or be compiled into WebAssembly modules and loaded dynamically.

Concepts

Services

A Jamsocket server hosts one or more services. Services determine how the server responds to various types of messages.

Clients

External connections into a Jamsocket server are called clients. Usually, clients have a 1:1 correspondence with users, so the term user is (informally) interchangable with client.

Rooms

When clients connect to a Jamsocket server, they connect to a particular room. Each room has a 1:1 correspondence with an instance of your service. This means that all service state is scoped to a room. Client identifiers are also scoped to a room, and when a service broadcasts a message it is delivered only to clients in that service instance's room.

You can think of rooms as being isolated and independent of each other, analogous to rooms in a chat service.

Usage

To create a Jamsocket service, implement the SimpleJamsocketService trait. There's only one function that you must implement, the constructor new.

Let's implement a simple shared counter. Any connected client will be able to increment or decrement it by sending increment or decrement messages (other messages will be ignored). Whenever the value is changed, we'll broadcast it to every connected client.

self.0 += 1, "decrement" => self.0 -= 1, _ => (), } ctx.send_message( MessageRecipient::Broadcast, &format!("new value: {}", self.0)); } } ">
impl SimpleJamsocketService for SharedCounterServer {
    fn new(_: &str,
           _: &impl JamsocketContext) -> Self {
        SharedCounterServer(0)
    }

    fn message(&mut self, _: ClientId,
               message: &str,
               ctx: &impl JamsocketContext) {
        match message {
            "increment" => self.0 += 1,
            "decrement" => self.0 -= 1,
            _ => (),
        }

        ctx.send_message(
            MessageRecipient::Broadcast,
            &format!("new value: {}", self.0));
    }
}

To serve this service, we will compile it into a WebAssembly module. We import the #[jamsocket_wasm] annotation macro and apply it to the existing SharedCounterServer declaration.

use jamsocket_wasm::jamsocket_wasm;

#[jamsocket_wasm]
struct SharedCounterServer(i32);

Then, install the jamsocket command-line tool and the wasm32-wasi target, and run jamsocket dev:

$ cargo install jamsocket-cli
$ rustup target add wasm32-wasi
$ jamsocket dev

jamsocket dev will build your app and serve it on port :8080. Then, open http://localhost:8080/status in your browser -- if all went well, you should see the status message ok. Open up developer tools in your browser and type:

let ws = new WebSocket('ws://localhost:8080/ws/1');
ws.onmessage = (c) => console.log(c.data);

This connects to your service, creating a new room with the id 1 if one doesn't exist (under default server settings, any string is a vaild room ID and connecting to a non-existant room will create it).

Now, you can increment the counter by sending the increment message using the ws handle:

ws.send('increment')

If everything is set up correctly, the result will be printed out:

new value: 1

If multiple clients are connected, each one will receive this message. Just like that, we have a mechanism for sharing some (very basic) application state between clients.

Using without WebAssembly

If you don't want to compile your service to WebAssembly (for example, if you want to use capabilities that are not exposed by WASI), you can use jamsocket-server.

use jamsocket_server::*;

fn main() -> std::io::Result<()> {
    serve::()?;

    Ok(())
}

Modules

Jamsocket has a modular architecture. If all you want to do is generate a Jamsocket service to be served with an existing Jamsocket WebAssembly server, the main crates you will interact with will probably be jamsocket-cli, which provides a command-line tool, and jamsocket-wasm, the main Cargo dependency for building services.

  • jamsocket is the core, minimal implementation of the service interface.
  • jamsocket-cli is a command-line interface for interacting with WebAssembly-compiled Jamsocket services.
  • jamsocket-server provides Actix actors to facilitate serving Jamsocket services in a WebSocket server.
  • jamsocket-wasm provides a macro for generating WebAssembly modules from Jamsocket services.
  • jamsocket-wasm-host provides a way to import Jamsocket services from WebAssembly modules.

See Also

Aper is a state synchronization library which works with Jamsocket.

You might also like...
websocket client

#websocket client async fn test_websocket()-anyhow::Result() { wasm_logger::init(wasm_logger::Config::default()); let (tx, rx) = futures_c

A webserver and websocket pair to stop your viewers from spamming !np and
A webserver and websocket pair to stop your viewers from spamming !np and "what's the song?" all the time.

spotify-np 🦀 spotify-np is a Rust-based local webserver inspired by l3lackShark's gosumemory application, but the catch is that it's for Spotify! 🎶

WebSocket-to-HTTP reverse proxy

websocket-bridge This is a simple reverse proxy server which accepts WebSocket connections and forwards any incoming frames to backend HTTP server(s)

A secure, real-time, low-latency binary WebSocket RPC subprotocol.

HardLight A secure, real-time, low-latency binary WebSocket RPC subprotocol. HardLight has two data models: RPC: a client connects to a server, and ca

Lightweight, event-driven WebSockets for Rust.

WS-RS Lightweight, event-driven WebSockets for Rust. /// A WebSocket echo server listen("127.0.0.1:3012", |out| { move |msg| { out.send(ms

A lightweight framework for building WebSocket-based application backends.

Jamsocket Jamsocket is a lightweight framework for building services that are accessed through WebSocket connections. Services can either be native Ru

Easy c̵̰͠r̵̛̠ö̴̪s̶̩̒s̵̭̀-t̶̲͝h̶̯̚r̵̺͐e̷̖̽ḁ̴̍d̶̖̔ ȓ̵͙ė̶͎ḟ̴͙e̸̖͛r̶̖͗ë̶̱́ṉ̵̒ĉ̷̥e̷͚̍ s̷̹͌h̷̲̉a̵̭͋r̷̫̊ḭ̵̊n̷̬͂g̵̦̃ f̶̻̊ơ̵̜ṟ̸̈́ R̵̞̋ù̵̺s̷̖̅ţ̸͗!̸̼͋

Rust S̵̓i̸̓n̵̉ I̴n̴f̶e̸r̵n̷a̴l mutability! Howdy, friendly Rust developer! Ever had a value get m̵̯̅ð̶͊v̴̮̾ê̴̼͘d away right under your nose just when

Hitbox is an asynchronous caching framework supporting multiple backends and suitable for distributed and for single-machine applications.

Hitbox is an asynchronous caching framework supporting multiple backends and suitable for distributed and for single-machine applications.

Lightweight stream-based WebSocket implementation for Rust.

Tungstenite Lightweight stream-based WebSocket implementation for Rust. use std::net::TcpListener; use std::thread::spawn; use tungstenite::server::ac

Ratchet is a fast, robust, lightweight and fully asynchronous implementation of RFC6455 (The WebSocket protocol).

Ratchet 🚧 Ratchet is a fast, robust, lightweight and fully asynchronous implementation of RFC6455 (The WebSocket protocol). Complete with an optional

Lightweight websocket implement for stream transmission.

Lightws Lightweight websocket implement for stream transmission. Features Avoid heap allocation. Avoid buffering frame payload. Use vectored-io if ava

A OAuth2 server library, for use in combination with actix or other frontends, featuring a set of configurable and pluggable backends.

oxide-auth A OAuth2 server library, for use in combination with common web servers, featuring a set of configurable and pluggable backends. About oxid

TUI input library supporting multiple backends
TUI input library supporting multiple backends

tui-input WARNING: Most of the functionality is only human tested. A TUI input library supporting multiple backends. This crate can be used with tui-r

Simple and flexible queue implementation for Rust with support for multiple backends (Redis, RabbitMQ, SQS, etc.)

Omniqueue Omniqueue is an abstraction layer over queue backends for Rust. It includes support for RabbitMQ, Redis streams, and SQS out of the box. The

Terminal UI to chat with large language models (LLM) using different model backends, and integrations with your favourite editors!
Terminal UI to chat with large language models (LLM) using different model backends, and integrations with your favourite editors!

Oatmeal Terminal UI to chat with large language models (LLM) using different model backends, and integrations with your favourite editors! Overview In

An example repository on how to start building graph applications on streaming data. Just clone and start building 💻 💪
An example repository on how to start building graph applications on streaming data. Just clone and start building 💻 💪

An example repository on how to start building graph applications on streaming data. Just clone and start building 💻 💪

A lightweight cross-platform system-monitoring fltk gui application based on sysinfo
A lightweight cross-platform system-monitoring fltk gui application based on sysinfo

Sysinfo-gui A lightweight cross-platform system-monitoring fltk gui application based on sysinfo. The UI design is inspired by stacer. The svg icons a

A lightweight new Bing (AI chat) desktop application which based on Tauri.

Bing Lite A lightweight new Bing (AI chat) desktop application which based on Tauri. No more Microsoft Edge, no more Chromium/Electron! Download The l

Nimbus is a framework for building parachain consensus systems on cumulus-based parachains.

Cumulo -- Nimbus ⛈️ Nimbus is a framework for building parachain consensus systems on cumulus-based parachains. Given the regular six-second pulse-lik

Comments
  • Example doesn't compile

    Example doesn't compile

    git clone https://github.com/drifting-in-space/stateroom.git
    cd stateroom
    cd examples
    cd native-echo
    cargo check
    

    the cargo check command line output https://app.warp.dev/block/IZrKz6eqSmHFYpjeeJb0TI

    opened by evanmays 1
  • Jamsocket-cli not installing

    Jamsocket-cli not installing

    Trying to install jamsocket-cli using

    cargo install jamsocket-cli
    

    but it failed to build.

        Updating crates.io index
      Installing jamsocket-cli v0.1.6
       Compiling proc-macro2 v1.0.36
       Compiling unicode-xid v0.2.2
       Compiling syn v1.0.85
       Compiling libc v0.2.112
       Compiling serde_derive v1.0.133
       Compiling serde v1.0.133
       Compiling cfg-if v1.0.0
       Compiling log v0.4.14
       Compiling semver v1.0.4
       Compiling autocfg v1.0.1
       Compiling memchr v2.4.1
       Compiling once_cell v1.9.0
       Compiling anyhow v1.0.52
       Compiling smallvec v1.7.0
       Compiling version_check v0.9.4
       Compiling hashbrown v0.11.2
       Compiling lazy_static v1.4.0
       Compiling bitflags v1.3.2
       Compiling scopeguard v1.1.0
       Compiling pin-project-lite v0.2.8
       Compiling itoa v0.4.8
       Compiling leb128 v0.2.5
       Compiling crc32fast v1.3.0
       Compiling unicode-segmentation v1.8.0
       Compiling crossbeam-utils v0.8.6
       Compiling fallible-iterator v0.2.0
       Compiling target-lexicon v0.12.2
       Compiling ppv-lite86 v0.2.16
       Compiling adler v1.0.2
       Compiling futures-core v0.3.19
       Compiling stable_deref_trait v1.2.0
       Compiling bytes v1.1.0
       Compiling parking_lot_core v0.8.5
       Compiling linux-raw-sys v0.0.28
       Compiling cranelift-codegen-shared v0.78.0
       Compiling paste v1.0.6
       Compiling itoa v1.0.1
       Compiling futures-task v0.3.19
       Compiling wasmparser v0.81.0
       Compiling typenum v1.15.0
       Compiling rustc-hash v1.1.0
       Compiling futures-util v0.3.19
       Compiling linux-raw-sys v0.0.29
       Compiling crossbeam-epoch v0.9.6
       Compiling more-asserts v0.2.2
       Compiling gimli v0.26.1
       Compiling pin-utils v0.1.0
       Compiling rustc-demangle v0.1.21
       Compiling futures-sink v0.3.19
       Compiling ambient-authority v0.0.1
       Compiling rayon-core v1.9.1
       Compiling either v1.6.1
       Compiling percent-encoding v2.1.0
       Compiling regex-syntax v0.6.25
       Compiling maybe-owned v0.3.4
       Compiling ipnet v2.3.1
       Compiling ryu v1.0.9
       Compiling serde_json v1.0.74
       Compiling zstd-safe v4.1.3+zstd.1.5.1
       Compiling tinyvec_macros v0.1.0
       Compiling local-waker v0.1.2
       Compiling wasmparser v0.77.0
       Compiling unicode-width v0.1.9
       Compiling async-trait v0.1.52
       Compiling fnv v1.0.7
       Compiling matches v0.1.9
       Compiling id-arena v2.2.1
       Compiling cpp_demangle v0.3.5
       Compiling encoding_rs v0.8.30
       Compiling wasmtime v0.31.0
       Compiling httparse v1.5.1
       Compiling wasi-common v0.31.0
       Compiling firestorm v0.5.0
       Compiling cpufeatures v0.2.1
       Compiling time-macros v0.2.3
       Compiling unicode-bidi v0.3.7
       Compiling convert_case v0.4.0
       Compiling mime v0.3.16
       Compiling slab v0.4.5
       Compiling wit-schema-version v0.1.0
       Compiling language-tags v0.3.2
       Compiling httpdate v1.0.2
       Compiling base64 v0.13.0
       Compiling wasm-bindgen-shared v0.2.78
       Compiling wasmtime-wasi v0.31.0
       Compiling camino v1.0.5
       Compiling byteorder v1.4.3
       Compiling wasmparser v0.59.0
       Compiling remove_dir_all v0.5.3
       Compiling safemem v0.3.3
       Compiling askama_escape v0.10.2
       Compiling fastrand v1.6.0
       Compiling http-range v0.1.4
       Compiling textwrap v0.14.2
       Compiling interactive_process v0.1.2
       Compiling termcolor v1.1.2
       Compiling strsim v0.10.0
       Compiling ansi_term v0.12.1
       Compiling fs_extra v1.2.0
       Compiling instant v0.1.12
       Compiling thread_local v1.1.3
       Compiling indexmap v1.8.0
       Compiling miniz_oxide v0.4.4
       Compiling memoffset v0.6.5
       Compiling rayon v1.5.1
       Compiling tracing-core v0.1.21
       Compiling sharded-slab v0.1.4
       Compiling lock_api v0.4.5
       Compiling generic-array v0.14.5
       Compiling unicase v2.6.0
       Compiling ahash v0.7.6
       Compiling cookie v0.16.0
       Compiling wast v21.0.0
       Compiling heck v0.3.3
       Compiling bytestring v1.0.0
       Compiling itertools v0.10.3
       Compiling addr2line v0.17.0
       Compiling wast v35.0.2
       Compiling regex-automata v0.1.10
       Compiling tinyvec v1.5.1
       Compiling actix-utils v3.0.0
       Compiling http v0.2.6
       Compiling form_urlencoded v1.0.1
       Compiling wit-writer v0.2.0
       Compiling base64 v0.9.3
       Compiling matchers v0.1.0
       Compiling unicode-normalization v0.1.19
       Compiling quote v1.0.14
       Compiling regalloc v0.0.32
       Compiling tracing-log v0.1.2
       Compiling jobserver v0.1.24
       Compiling dirs-sys-next v0.1.2
       Compiling getrandom v0.2.3
       Compiling num_cpus v1.13.1
       Compiling signal-hook-registry v1.4.0
       Compiling mio v0.7.14
       Compiling region v2.2.0
       Compiling socket2 v0.4.2
       Compiling time v0.3.5
       Compiling mio v0.8.0
       Compiling atty v0.2.14
       Compiling tempfile v3.3.0
       Compiling wast v39.0.0
       Compiling aho-corasick v0.7.18
       Compiling os_str_bytes v6.0.0
       Compiling wit-parser v0.2.0
       Compiling wit-text v0.8.0
       Compiling actix-service v2.0.2
       Compiling crossbeam-channel v0.5.2
       Compiling idna v0.2.3
       Compiling flate2 v1.0.22
       Compiling cc v1.0.72
       Compiling dirs-next v2.0.0
       Compiling rand_core v0.6.3
       Compiling parking_lot v0.11.2
       Compiling regex v1.5.4
       Compiling wat v1.0.41
       Compiling wit-validator v0.2.1
       Compiling mime_guess v2.0.3
       Compiling local-channel v0.1.2
       Compiling block-buffer v0.10.0
       Compiling crypto-common v0.1.1
       Compiling url v2.2.2
       Compiling shellexpand v2.1.0
       Compiling crossbeam-deque v0.8.1
       Compiling wasmtime-fiber v0.31.0
       Compiling zstd-sys v1.6.2+zstd.1.5.1
       Compiling backtrace v0.3.63
       Compiling wasmtime-runtime v0.31.0
       Compiling psm v0.1.16
       Compiling brotli-sys v0.3.2
       Compiling rand_chacha v0.3.1
       Compiling tokio v1.15.0
       Compiling thiserror-impl v1.0.30
       Compiling tracing-attributes v0.1.18
       Compiling walrus-macro v0.19.0
       Compiling actix-macros v0.2.3
       Compiling derive_more v0.99.17
       Compiling actix_derive v0.6.0
       Compiling digest v0.10.1
       Compiling rand v0.8.4
       Compiling tokio-util v0.6.9
       Compiling thiserror v1.0.30
       Compiling tracing v0.1.29
       Compiling walrus v0.19.0
       Compiling actix-rt v2.5.1
       Compiling sha-1 v0.10.0
       Compiling actix-codec v0.4.2
       Compiling cap-rand v0.19.1
       Compiling witx v0.9.1
       Compiling tracing-subscriber v0.3.5
       Compiling actix-server v2.0.0-rc.3
       Compiling actix v0.12.0
       Compiling wasm-bindgen-wasm-conventions v0.2.78
       Compiling wit-walrus v0.6.0
       Compiling wasm-bindgen-externref-xform v0.2.78
       Compiling wasm-bindgen-multi-value-xform v0.2.78
       Compiling cranelift-entity v0.78.0
       Compiling actix-router v0.5.0-beta.4
       Compiling bincode v1.3.3
       Compiling serde_urlencoded v0.7.0
       Compiling jamsocket v0.1.6
       Compiling cargo-platform v0.1.2
       Compiling toml v0.5.8
       Compiling wiggle-generate v0.31.0
       Compiling wasm-bindgen-threads-xform v0.2.78
       Compiling wasm-bindgen-wasm-interpreter v0.2.78
       Compiling rustc_version v0.4.0
       Compiling cranelift-codegen-meta v0.78.0
       Compiling gimli v0.25.0
       Compiling object v0.27.1
       Compiling h2 v0.3.10
       Compiling clap v3.0.5
       Compiling cranelift-bforest v0.78.0
       Compiling wasmtime-types v0.31.0
       Compiling actix-web-codegen v0.5.0-rc.1
       Compiling jamsocket-stdio v0.1.5
       Compiling cargo_metadata v0.14.1
       Compiling wasm-bindgen-cli-support v0.2.78
       Compiling io-lifetimes v0.3.3
       Compiling rsix v0.23.9
       Compiling rsix v0.25.1
       Compiling unsafe-io v0.9.1
       Compiling cap-primitives v0.19.1
       Compiling cap-std v0.19.1
       Compiling cap-fs-ext v0.19.1
       Compiling system-interface v0.15.0
       Compiling wiggle-macro v0.31.0
       Compiling addr2line v0.16.0
       Compiling cranelift-codegen v0.78.0
       Compiling wasmtime-environ v0.31.0
       Compiling fs-set-times v0.12.2
       Compiling cranelift-frontend v0.78.0
       Compiling cranelift-native v0.78.0
       Compiling cranelift-wasm v0.78.0
       Compiling wasmtime-cranelift v0.31.0
       Compiling cap-time-ext v0.19.1
       Compiling wasmtime-jit v0.31.0
       Compiling wiggle v0.31.0
       Compiling wasi-cap-std-sync v0.31.0
       Compiling jamsocket-wasm-host v0.1.5
       Compiling brotli2 v0.3.2
       Compiling zstd v0.9.2+zstd.1.5.1
       Compiling actix-http v3.0.0-beta.18
       Compiling actix-web v4.0.0-beta.19
       Compiling actix-web-actors v4.0.0-beta.10
       Compiling actix-files v0.6.0-beta.13
       Compiling jamsocket-server v0.1.6
       Compiling jamsocket-cli v0.1.6
    error: cannot find derive macro `Parser` in this scope
     --> /home/eteims/.cargo/registry/src/github.com-1ecc6299db9ec823/jamsocket-cli-0.1.6/src/cli_opts.rs:3:10
      |
    3 | #[derive(Parser)]
      |          ^^^^^^
      |
    note: `Parser` is imported here, but it is only a trait, without a derive macro
     --> /home/eteims/.cargo/registry/src/github.com-1ecc6299db9ec823/jamsocket-cli-0.1.6/src/cli_opts.rs:1:5
      |
    1 | use clap::Parser;
      |     ^^^^^^^^^^^^
    
    error: cannot find attribute `clap` in this scope
     --> /home/eteims/.cargo/registry/src/github.com-1ecc6299db9ec823/jamsocket-cli-0.1.6/src/cli_opts.rs:5:7
      |
    5 |     #[clap(subcommand)]
      |       ^^^^
      |
      = note: `clap` is in scope, but it is a crate, not an attribute
    
    error: cannot find derive macro `Parser` in this scope
     --> /home/eteims/.cargo/registry/src/github.com-1ecc6299db9ec823/jamsocket-cli-0.1.6/src/cli_opts.rs:9:10
      |
    9 | #[derive(Parser)]
      |          ^^^^^^
      |
    note: `Parser` is imported here, but it is only a trait, without a derive macro
     --> /home/eteims/.cargo/registry/src/github.com-1ecc6299db9ec823/jamsocket-cli-0.1.6/src/cli_opts.rs:1:5
      |
    1 | use clap::Parser;
      |     ^^^^^^^^^^^^
    
    error: cannot find derive macro `Parser` in this scope
      --> /home/eteims/.cargo/registry/src/github.com-1ecc6299db9ec823/jamsocket-cli-0.1.6/src/cli_opts.rs:18:10
       |
    18 | #[derive(Parser)]
       |          ^^^^^^
       |
    note: `Parser` is imported here, but it is only a trait, without a derive macro
      --> /home/eteims/.cargo/registry/src/github.com-1ecc6299db9ec823/jamsocket-cli-0.1.6/src/cli_opts.rs:1:5
       |
    1  | use clap::Parser;
       |     ^^^^^^^^^^^^
    
    error: cannot find derive macro `Parser` in this scope
      --> /home/eteims/.cargo/registry/src/github.com-1ecc6299db9ec823/jamsocket-cli-0.1.6/src/cli_opts.rs:23:10
       |
    23 | #[derive(Parser)]
       |          ^^^^^^
       |
    note: `Parser` is imported here, but it is only a trait, without a derive macro
      --> /home/eteims/.cargo/registry/src/github.com-1ecc6299db9ec823/jamsocket-cli-0.1.6/src/cli_opts.rs:1:5
       |
    1  | use clap::Parser;
       |     ^^^^^^^^^^^^
    
    error: cannot find attribute `clap` in this scope
      --> /home/eteims/.cargo/registry/src/github.com-1ecc6299db9ec823/jamsocket-cli-0.1.6/src/cli_opts.rs:25:7
       |
    25 |     #[clap(short, long)]
       |       ^^^^
       |
       = note: `clap` is in scope, but it is a crate, not an attribute
    
    error: cannot find attribute `clap` in this scope
      --> /home/eteims/.cargo/registry/src/github.com-1ecc6299db9ec823/jamsocket-cli-0.1.6/src/cli_opts.rs:28:7
       |
    28 |     #[clap(short, long)]
       |       ^^^^
       |
       = note: `clap` is in scope, but it is a crate, not an attribute
    
    error: cannot find derive macro `Parser` in this scope
      --> /home/eteims/.cargo/registry/src/github.com-1ecc6299db9ec823/jamsocket-cli-0.1.6/src/cli_opts.rs:32:10
       |
    32 | #[derive(Parser)]
       |          ^^^^^^
       |
    note: `Parser` is imported here, but it is only a trait, without a derive macro
      --> /home/eteims/.cargo/registry/src/github.com-1ecc6299db9ec823/jamsocket-cli-0.1.6/src/cli_opts.rs:1:5
       |
    1  | use clap::Parser;
       |     ^^^^^^^^^^^^
    
    error: cannot find attribute `clap` in this scope
      --> /home/eteims/.cargo/registry/src/github.com-1ecc6299db9ec823/jamsocket-cli-0.1.6/src/cli_opts.rs:38:7
       |
    38 |     #[clap(short, long, default_value = "8080")]
       |       ^^^^
       |
       = note: `clap` is in scope, but it is a crate, not an attribute
    
    error: cannot find attribute `clap` in this scope
      --> /home/eteims/.cargo/registry/src/github.com-1ecc6299db9ec823/jamsocket-cli-0.1.6/src/cli_opts.rs:42:7
       |
    42 |     #[clap(short = 'i', long, default_value = "30")]
       |       ^^^^
       |
       = note: `clap` is in scope, but it is a crate, not an attribute
    
    error: cannot find attribute `clap` in this scope
      --> /home/eteims/.cargo/registry/src/github.com-1ecc6299db9ec823/jamsocket-cli-0.1.6/src/cli_opts.rs:47:7
       |
    47 |     #[clap(short = 't', long, default_value = "120")]
       |       ^^^^
       |
       = note: `clap` is in scope, but it is a crate, not an attribute
    
    error: could not compile `jamsocket-cli` due to 11 previous errors
    warning: build failed, waiting for other jobs to finish...
    error: failed to compile `jamsocket-cli v0.1.6`, intermediate artifacts can be found at `/tmp/cargo-installmE5dBN`
    
    Caused by:
      build failed
    
    
    opened by EteimZ 1
Owner
null
Lightweight stream-based WebSocket implementation for Rust.

Tungstenite Lightweight stream-based WebSocket implementation for Rust. use std::net::TcpListener; use std::thread::spawn; use tungstenite::server::ac

Snapview GmbH 1.3k Jan 2, 2023
Lightweight websocket implement for stream transmission.

Lightws Lightweight websocket implement for stream transmission. Features Avoid heap allocation. Avoid buffering frame payload. Use vectored-io if ava

zephyr 25 Dec 27, 2022
A WebSocket (RFC6455) library written in Rust

Rust-WebSocket Note: Maintainership of this project is slugglish. You may want to use tungstenite or tokio-tungstenite instead. Rust-WebSocket is a We

Rust Websockets 1.3k Jan 6, 2023
Websocket generic library for Bitwyre WS-API

Websocket Core (Rust) Websocket generic server library for: Periodic message broadcast Eventual (Pubsub) message broadcast Async request reply Authors

Bitwyre 13 Oct 28, 2022
A CLI development tool for WebSocket APIs

A CLI development tool for WebSocket APIs

Espen Henriksen 622 Dec 26, 2022
Spawn process IO to websocket with full PTY support.

Cliws Spawn process IO to websocket with full PTY support. Features Any process IO through Websocket Full pty support: VIM, SSH, readline, Ctrl+X Auto

B23r0 91 Jan 5, 2023
A WebSocket (RFC6455) library written in Rust

Rust-WebSocket Rust-WebSocket is a WebSocket (RFC6455) library written in Rust. Rust-WebSocket provides a framework for dealing with WebSocket connect

Jason N 19 Aug 22, 2022
An aria2 websocket jsonrpc in Rust.

aria2-ws An aria2 websocket jsonrpc in Rust. Built with tokio. Docs.rs aria2 RPC docs Features Almost all methods and structed responses Auto reconnec

null 8 Sep 7, 2022
A simple toy websocket client to connect to Bitstamp.net and print the live order book written in Rust.

A simple toy websocket client to connect to Bitstamp.net and print the live order book written in Rust.

Nate Houk 1 Feb 14, 2022
The ever fast websocket tunnel built on top of lightws

Kaminari The ever fast websocket tunnel built on top of lightws. Intro Client side receives tcp then sends [tcp/ws/tls/wss]. Server side receives [tcp

zephyr 261 Dec 27, 2022