3 个版本 (重大更改)
0.3.0 | 2024 年 6 月 18 日 |
---|---|
0.2.0 | 2024 年 3 月 1 日 |
0.1.0 | 2024 年 2 月 23 日 |
#1324 在 Web 编程
每月 149 次下载
17KB
321 行
axum-tws
axum-tws
是一个替代 WebSocket 提取器,用于 axum,使用 tokio-websockets 作为底层 WebSocket 库,而不是 tungstenite
。
它不是一个完全的替代品,也没有这个意图。虽然您的升级处理器看起来相同,但在 tokio-websockets
中使用 Message
类型与 tungstenite
略有不同。请参阅 tokio-websockets 文档 以获取详细信息,或者查看下面的示例。
大部分代码直接从 axum::extract::ws 模块 转移而来 - 所有荣誉归原作者。
入门指南
运行 cargo add axum-tws
将库添加到您的项目中。
回声服务器示例
use axum::{response::Response, routing::get, Router};
use axum_tws::{Message, WebSocket, WebSocketUpgrade};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let listener = tokio::net::TcpListener::bind("127.0.0.1:3000").await?;
axum::serve(listener, Router::new().route("/ws", get(handle_upgrade))).await?;
Ok(())
}
async fn handle_upgrade(ws: WebSocketUpgrade) -> Response {
ws.on_upgrade({
move |socket| async {
if let Err(e) = handle_ws(socket).await {
println!("websocket error: {:?}", e);
}
}
})
}
async fn handle_ws(mut socket: WebSocket) -> Result<(), Box<dyn std::error::Error>> {
while let Some(Ok(msg)) = socket.recv().await {
if msg.is_text() {
socket.send(msg).await?;
}
}
Ok(())
}
贡献
欢迎贡献!如果您有功能想法或发现错误,请告诉我。PR 受到欢迎,但如果不是小改动,请先打开一个问题,以便我们都在同一页面上!
许可证
axum-tws
可以选择以下任一许可证进行双许可
任选其一。
依赖关系
~13–22MB
~409K SLoC