在Rust中使用axum
处理WebSocket连接,你需要使用tokio-tungstenite
库。首先,确保在你的Cargo.toml
文件中添加了以下依赖:
[dependencies] axum = "0.6" tokio = { version = "1", features = ["full"] } tokio-tungstenite = "0.15"
接下来,你可以创建一个简单的WebSocket服务器,如下所示:
use axum::{service::{make_service_fn, service_fn}, Server, Body}; use tokio_tungstenite::{accept_async, WebSocketStream}; use std::convert::Infallible; async fn handle_connection(ws_stream: WebSocketStream) { let (mut user_ws_sender, mut user_ws_receiver) = ws_stream.split(); while let Some(msg) = user_ws_receiver.next().await { let msg = msg.expect("error caught in in_loop"); if msg.is_text() || msg.is_binary() { user_ws_sender.send(msg).await.expect("error sending message back"); } else { println!("unsupported message type"); } } } #[tokio::main] async fn main() { let make_svc = make_service_fn(|_conn| { async { Ok::<_, Infallible>(service_fn(handle_connection)) } }); let addr = ([127, 0, 0, 1], 3000).into(); let server = Server::bind(&addr).serve(make_svc); if let Err(e) = server.await { eprintln!("server error: {}", e); } }
这个示例创建了一个简单的WebSocket服务器,监听本地地址127.0.0.1:3000
。当客户端连接到服务器时,handle_connection
函数将被调用。这个函数接收一个WebSocketStream
,然后在一个循环中处理传入的消息。如果消息是文本或二进制类型,它将被发送回客户端。
要测试这个服务器,你可以使用任何支持WebSocket的客户端库,例如浏览器中的JavaScript WebSocket
API。