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.
 
 
Daniel Abramov 57d9e23939
Merge pull request #360 from doylemark/master
11 months ago
.github Exchange Travis CI for GitHub Actions 1 year ago
autobahn Revert "Add `permessage-deflate` support" 1 year ago
benches Rework write 100k bench to have a slow writes & even slower flushes 11 months ago
examples Rename methods to `read`, `send`, `write` & `flush` 11 months ago
fuzz Rename methods to `read`, `send`, `write` & `flush` 11 months ago
scripts Revert "Add `permessage-deflate` support" 1 year ago
src return correct protocol error when missing http version 11 months ago
tests Add write_flush_behaviour test 11 months ago
.gitignore Rename methods to `read`, `send`, `write` & `flush` 11 months ago
CHANGELOG.md Buffer writes before writing to the underlying stream 11 months ago
Cargo.toml Merge pull request #357 from alexheretic/flush-writes-less 11 months ago
LICENSE-APACHE Relicense under MIT + Apache-2.0. 7 years ago
LICENSE-MIT Relicense under MIT + Apache-2.0. 7 years ago
README.md Rename methods to `read`, `send`, `write` & `flush` 11 months ago
rustfmt.toml Fix clippy warnings and deprecated settings 3 years ago

README.md

Tungstenite

Lightweight stream-based WebSocket implementation for Rust.

use std::net::TcpListener;
use std::thread::spawn;
use tungstenite::accept;

/// A WebSocket echo server
fn main () {
    let server = TcpListener::bind("127.0.0.1:9001").unwrap();
    for stream in server.incoming() {
        spawn (move || {
            let mut websocket = accept(stream.unwrap()).unwrap();
            loop {
                let msg = websocket.read().unwrap();

                // We do not want to send back ping/pong messages.
                if msg.is_binary() || msg.is_text() {
                    websocket.send(msg).unwrap();
                }
            }
        });
    }
}

Take a look at the examples section to see how to write a simple client/server.

NOTE: tungstenite-rs is more like a barebone to build reliable modern networking applications using WebSockets. If you're looking for a modern production-ready "batteries included" WebSocket library that allows you to efficiently use non-blocking sockets and do "full-duplex" communication, take a look at tokio-tungstenite.

MIT licensed Apache-2.0 licensed Crates.io Build Status

Documentation

Introduction

This library provides an implementation of WebSockets, RFC6455. It allows for both synchronous (like TcpStream) and asynchronous usage and is easy to integrate into any third-party event loops including MIO. The API design abstracts away all the internals of the WebSocket protocol but still makes them accessible for those who wants full control over the network.

Why Tungstenite?

It's formerly WS2, the 2nd implementation of WS. WS2 is the chemical formula of tungsten disulfide, the tungstenite mineral.

Features

Tungstenite provides a complete implementation of the WebSocket specification. TLS is supported on all platforms using native-tls or rustls. The following features are available:

  • native-tls
  • native-tls-vendored
  • rustls-tls-native-roots
  • rustls-tls-webpki-roots

Choose the one that is appropriate for your needs.

By default no TLS feature is activated, so make sure you use one of the TLS features, otherwise you won't be able to communicate with the TLS endpoints.

There is no support for permessage-deflate at the moment, but the PRs are welcome 😉

Testing

Tungstenite is thoroughly tested and passes the Autobahn Test Suite for WebSockets. It is also covered by internal unit tests as well as possible.

Contributing

Please report bugs and make feature requests here.