wae-websocket
WebSocket 模块 - 提供实时通信抽象层。
主要功能
- 服务端/客户端: 统一的 WebSocket API
- 房间管理: 支持房间广播
- 连接管理: 连接状态跟踪
- 自动重连: 客户端断线重连
- 心跳检测: 保持连接活跃
技术栈
- WebSocket: tokio-tungstenite
- 异步运行时: Tokio
- 序列化: serde
服务端示例
use wae_websocket::{WebSocketServer, ServerConfig, ClientHandler, Connection, Message};
struct MyHandler;
impl ClientHandler for MyHandler {
async fn on_connect(&self, conn: &Connection) -> Result<()> {
println!("客户端连接: {}", conn.id);
Ok(())
}
async fn on_message(&self, conn: &Connection, msg: Message) -> Result<()> {
println!("收到消息: {:?}", msg);
Ok(())
}
async fn on_disconnect(&self, conn: &Connection) {
println!("客户端断开: {}", conn.id);
}
}
#[tokio::main]
async fn main() {
let server = WebSocketServer::new(ServerConfig {
port: 8080,
max_connections: 1000,
..Default::default()
});
server.start(MyHandler).await?;
}
客户端示例
use wae_websocket::{WebSocketClient, ClientConfig, Message};
#[tokio::main]
async fn main() {
let mut client = WebSocketClient::new(ClientConfig::new("ws://localhost:8080"));
client.send_text("Hello, Server!").await?;
while let Some(msg) = client.receive().await {
println!("收到: {:?}", msg);
}
}
房间广播
let server = WebSocketServer::new(config);
server.room_manager().join("room-1", "conn-001").await;
server.broadcast_to_room("room-1", Message::text("大家好")).await?;