• Stars
    star
    378
  • Rank 109,295 (Top 3 %)
  • Language
    Rust
  • License
    MIT License
  • Created over 4 years ago
  • Updated 3 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Async binding for Tungstenite, the Lightweight stream-based WebSocket implementation

async-tungstenite

Asynchronous WebSockets for async-std, tokio, gio and any std Futures runtime.

MIT licensed Crates.io Build Status

Documentation

Usage

Add this in your Cargo.toml:

[dependencies]
async-tungstenite = "*"

Take a look at the examples/ directory for client and server examples. You may also want to get familiar with async-std or tokio if you don't have any experience with it.

What is async-tungstenite?

This crate is based on tungstenite Rust WebSocket library and provides async bindings and wrappers for it, so you can use it with non-blocking/asynchronous TcpStreams from and couple it together with other crates from the async stack. In addition, optional integration with various other crates can be enabled via feature flags

  • async-tls: Enables the async_tls module, which provides integration with the async-tls TLS stack and can be used independent of any async runtime.
  • async-std-runtime: Enables the async_std module, which provides integration with the async-std runtime.
  • async-native-tls: Enables the additional functions in the async_std module to implement TLS via async-native-tls.
  • tokio-runtime: Enables the tokio module, which provides integration with the tokio runtime.
  • tokio-native-tls: Enables the additional functions in the tokio module to implement TLS via tokio-native-tls.
  • tokio-rustls-native-certs: Enables the additional functions in the tokio module to implement TLS via tokio-rustls and uses native system certificates found with rustls-native-certs.
  • tokio-rustls-webpki-roots: Enables the additional functions in the tokio module to implement TLS via tokio-rustls and uses the certificates webpki-roots provides.
  • gio-runtime: Enables the gio module, which provides integration with the gio runtime.

Messages vs Streaming

WebSocket provides a message-oriented protocol, and this crate supports sending and receiving data in messages; protocols built on WebSocket are allowed to make message boundaries semantically significant. However, some users of WebSocket may want to treat the socket as a continuous stream of bytes. If you know the sending end does not place significance on message boundaries, and you want to process a stream of bytes without regard to those boundaries, try ws_stream_tungstenite, which builds upon this crate.

Is it performant?

In essence, async-tungstenite is a wrapper for tungstenite, so the performance is capped by the performance of tungstenite. tungstenite has a decent performance (it has been used in production for real-time communication software, video conferencing, etc), but it's definitely not the fastest WebSocket library in the world at the moment of writing this note.

If performance is of a paramount importance for you (especially if you send large messages), then you might want to check other libraries that have been designed to be performant or you could file a PR against tungstenite to improve the performance!

We are aware of changes that both tungstenite and async-tungstenite need in order to fill the gap of ~30% performance difference between tungstenite and more performant libraries like fastwebsockets, but we have not worked on that yet as it was not required for the use case that original authors designed the library for. In the course of past years we have merged several performance improvements submitted by the awesome community of Rust users who helped to improve the library! For a quick summary of the pending performance problems/improvements, see the comment.

tokio-tungstenite

Originally this crate was created as a fork of tokio-tungstenite and ported to the traits of the futures crate. Integration into async-std, tokio and gio was added on top of that.

More Repositories

1

gstreamer-rs

GStreamer bindings for Rust - This repository moved to https://gitlab.freedesktop.org/gstreamer/gstreamer-rs
Rust
486
star
2

gst-plugin-rs

Rust crate for writing GStreamer plugins and various plugins - This repository moved to https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs
Rust
105
star
3

ebur128

Implementation of the EBU R128 loudness standard
Rust
82
star
4

gst-player

GStreamer Playback API
C
68
star
5

http-launch

Simple GStreamer HTTP live streaming from a pipeline description
C
64
star
6

gobject-example-rs

Example for exporting a GObject/C API from Rust
Rust
42
star
7

gst-snippets

Some small GStreamer example applications
C
35
star
8

gst-launch-remote

Objective-C
27
star
9

byte-slice-cast

Safely cast slices of one built-in fundamental number type to another
Rust
27
star
10

arduino-due-rust

Arduino Due Rust Example Application
Rust
24
star
11

rtsp-types

RTSP (RFC 7826) types and parsers/serializers
Rust
23
star
12

rustfest-barcelona19-gst-webrtc-workshop

Rust
22
star
13

gst-plugin-threadshare

Rust GStreamer elements that operate on shared threads between them using Tokio
Rust
20
star
14

snippets

Some algorithms and data structures
C
16
star
15

rustfest-rome18-gtk-gst-workshop

Rust
15
star
16

rtsp-server

RTSP Server Library
Rust
12
star
17

mandelbrot

GTK/Rust based viewer for the Mandelbrot set
Rust
12
star
18

sdp-types

SDP (RFC 4566) types and parsers/serializer
Rust
9
star
19

html-rss-proxy

HTML to RSS feed proxy
Haskell
7
star
20

send-cell

Immutable memory region with runtime Send checking
Rust
6
star
21

gstreamer-sys

Rust FFI bindings for GStreamer - This repository moved to https://gitlab.freedesktop.org/gstreamer/gstreamer-rs-sys
Rust
5
star
22

conduit-iconv

Conduit wrapper around iconv
Haskell
4
star
23

ptp-clock-reflector

PTP clock reflector
Rust
3
star
24

gtk-subclass

Rust GTK subclassing crate
Rust
3
star
25

rust-muldiv

Multiply & Divide trait for unsigned integers with overflow protection
Rust
3
star
26

gio-futures

Rust
1
star
27

snippets.rs

Rust
1
star
28

gst-plugin-rust-av

Rust
1
star
29

whistler

Library for learning, identifying and localizing signalling tones
C
1
star
30

glib-futures

Rust
1
star