11 个版本 (7 个重大更改)

0.12.0 2024 年 8 月 7 日
0.11.0 2024 年 6 月 13 日
0.10.0 2024 年 2 月 24 日
0.9.0 2023 年 12 月 11 日
0.1.2 2022 年 7 月 30 日

#80WebSocket

Download history 168/week @ 2024-05-03 292/week @ 2024-05-10 345/week @ 2024-05-17 274/week @ 2024-05-24 260/week @ 2024-05-31 300/week @ 2024-06-07 490/week @ 2024-06-14 350/week @ 2024-06-21 481/week @ 2024-06-28 447/week @ 2024-07-05 486/week @ 2024-07-12 398/week @ 2024-07-19 559/week @ 2024-07-26 484/week @ 2024-08-02 306/week @ 2024-08-09 308/week @ 2024-08-16

每月 1,721 次下载
2 软件包 中使用

MIT/Apache

39KB
648

fe2o3-amqp-ws

AMQP 1.0 WebSocket 绑定的适配器

这提供了一个对 tokio_tungstenite::WebSocketStream 的薄包装,包装器通过将 "Sec-WebSocket-Protocol" HTTP 标头设置为 "amqp" 来执行 WebSocket 握手。

包装类型 WebSocketStream 也可以用于非 AMQP 应用程序;然而,用户应使用原始 tokio_tungstenite API 建立WebSocket流,然后通过 fe2o3_amqp_ws::WebSocketStream::from(ws_stream) 包装流。

功能标志

default = []
功能 描述
native-tls 启用 "tokio-tungstenite/native-tls"
native-tls-vendored 启用 "tokio-tungstenite/native-tls-vendored"
rustls-tls-native-roots 启用 "tokio-tungstenite/rustls-tls-native-roots"
rustls-tls-webpki-roots 启用 "tokio-tungstenite/rustls-tls-webpki-roots"

示例

use fe2o3_amqp::{
    types::{messaging::Outcome, primitives::Value},
    Connection, Delivery, Receiver, Sender, Session,
};
use fe2o3_amqp_ws::WebSocketStream;

#[tokio::main]
async fn main() {
    let ws_stream = WebSocketStream::connect("ws://127.0.0.1:5673")
        .await
        .unwrap();
    let mut connection = Connection::builder()
        .container_id("connection-1")
        .open_with_stream(ws_stream)
        .await
        .unwrap();
    let mut session = Session::begin(&mut connection).await.unwrap();

    let mut sender = Sender::attach(&mut session, "rust-sender-link-1", "q1")
        .await
        .unwrap();
    let mut receiver = Receiver::attach(&mut session, "rust-recver-1", "q1")
        .await
        .unwrap();

    let fut = sender.send_batchable("hello batchable AMQP").await.unwrap();

    let delivery: Delivery<Value> = receiver.recv().await.unwrap();
    receiver.accept(&delivery).await.unwrap();

    let outcome: Outcome = fut.await.unwrap();
    outcome.accepted_or_else(|state| state).unwrap(); // Handle delivery outcome

    sender.close().await.unwrap();
    receiver.close().await.unwrap();
    session.end().await.unwrap();
    connection.close().await.unwrap();
}

WebAssembly 支持

自 "0.3.0" 以来已添加对 wasm32-unknown-unknown 目标的实验性支持,并使用内部 web_sys::WebSocket。此示例可在外部 examples/wasm32-in-browser 中找到。

许可: MIT/Apache-2.0

依赖项

~2–15MB
~209K SLoC