#reqwest #stream

reqwest-websocket

使用 reqwest 进行 WebSocket 连接

6 个版本 (3 个重大更新)

0.4.2 2024 年 8 月 19 日
0.4.1 2024 年 7 月 9 日
0.4.0 2024 年 6 月 26 日
0.3.0 2024 年 4 月 16 日
0.1.0 2024 年 2 月 14 日

#22 in WebSocket

Download history 483/week @ 2024-05-04 914/week @ 2024-05-11 690/week @ 2024-05-18 914/week @ 2024-05-25 850/week @ 2024-06-01 1022/week @ 2024-06-08 1319/week @ 2024-06-15 1275/week @ 2024-06-22 1056/week @ 2024-06-29 1356/week @ 2024-07-06 1067/week @ 2024-07-13 591/week @ 2024-07-20 773/week @ 2024-07-27 929/week @ 2024-08-03 953/week @ 2024-08-10 1362/week @ 2024-08-17

每月 4,119 次下载
用于 3 crates

MIT 许可证

52KB
945

reqwest-websocket

crates.io Documentation MIT Build

reqwest 的扩展,允许进行 WebSocket 连接。

此 crate 包含扩展 trait RequestBuilderExt,它向 reqwest::RequestBuilder 添加了一个 upgrade() 方法,用于准备 HTTP 请求以升级连接到 WebSocket。在您调用 upgrade() 之后,您可以像往常一样使用 send() 发送升级后的请求,这将返回一个 UpgradeResponse。The UpgradeResponse 包裹 reqwest::Response(及其引用),因此如果需要,您可以检查响应。最后,您可以使用 into_websocket() 在响应上将其转换为消息的异步流和接收器。支持文本和二进制消息。

示例

要查看完整的示例,请参阅 hello_world.rs

// Extends the `reqwest::RequestBuilder` to allow WebSocket upgrades.
use reqwest_websocket::RequestBuilderExt;

// Creates a GET request, upgrades and sends it.
let response = Client::default()
    .get("wss://echo.websocket.org/")
    .upgrade() // Prepares the WebSocket upgrade.
    .send()
    .await?;

// Turns the response into a WebSocket stream.
let mut websocket = response.into_websocket().await?;

// The WebSocket implements `Sink<Message>`.
websocket.send(Message::Text("Hello, World".into())).await?;

// The WebSocket is also a `TryStream` over `Message`s.
while let Some(message) = websocket.try_next().await? {
    if let Message::Text(text) = message {
        println!("received: {text}")
    }
}

对 WebAssembly 的支持

reqwest-websocket 使用 reqwest 内置的 HTTP 升级功能,该功能在 WebAssembly 上不可用。当您在 WebAssembly 中使用 reqwest-websocket 时,它将回退到使用 web_sys::WebSocket。这意味着除了 URL(包括查询参数)之外,您的请求不使用任何内容。

依赖项

~4–16MB
~225K SLoC