#byte-stream #stream #async #wasm #io

stream-ws

在 WebSocket 上构建的层,支持在原生和 WebAssembly 中携带字节流。

2 个版本

0.1.1 2023 年 10 月 12 日
0.1.0 2023 年 10 月 12 日

#209 in WebSocket


2 个 Crates 中使用 (通过 gneiss-mqtt)

MIT/Apache

26KB
445

stream-ws

docs.rs repo crates-io

在 WebSocket 上构建的层,支持在原生和 WebAssembly 中携带字节流。

提供可以包装任何 WebSocket 消息流实现的方法,并实现 AsyncReadAsyncBufReadAsyncWrite

用法

运行 cargo add stream-ws 将其添加到您的 crate 中。

示例在 examples/

Tungstenite

使用功能 tungstenite

对于来自 crate tokio-tungsteniteasync-tungsteniteWebSocketStream,使用

let stream = stream_ws::tungstenite::WsByteStream::new(inner)

Gloo (用于 WebAssembly)

使用功能 gloo

对于来自 crate glooWebSocket 使用

let stream = stream_ws::gloo::WsByteStream::new(inner)

包装其他 WebSocket 实现的底层流

您的 WebSocket 实现应该有一个满足 trait 约束的 struct S

Stream<Item = Result<Msg, E>> + Sink<Msg, Error = E> + Unpin

其中 MsgE 是实现的消息和错误类型。

创建一个 struct Handler 并实现 WsMessageHandle,这很简单,然后调用 Handler::wrap_stream(underlying_stream) 来获取 WsByteStream

Crates 功能

  • tokio: 实现 tokioAsyncReadAsyncBufReadAsyncWrite 变体
  • tungstenite: 来自 crate tungstenite 的消息和错误类型处理器
  • gloo: 来自 crate gloo 的消息和错误类型处理器

许可证:MIT OR Apache-2.0

依赖项

~1–4MB
~80K SLoC