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
每月 4,119 次下载
用于 3 crates
52KB
945 行
reqwest-websocket
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