10 个版本

0.3.0 2024年7月20日
0.2.5 2022年3月10日
0.1.0 2020年9月27日
0.1.0-alpha.12020年5月8日
0.1.0-alpha.02020年4月25日

#14WebSocket

Download history 1906/week @ 2024-05-04 2083/week @ 2024-05-11 1820/week @ 2024-05-18 1757/week @ 2024-05-25 2000/week @ 2024-06-01 2098/week @ 2024-06-08 2325/week @ 2024-06-15 2177/week @ 2024-06-22 2667/week @ 2024-06-29 3571/week @ 2024-07-06 5065/week @ 2024-07-13 6575/week @ 2024-07-20 5397/week @ 2024-07-27 5138/week @ 2024-08-03 6063/week @ 2024-08-10 5253/week @ 2024-08-17

22,825 每月下载量
用于 7 包

MIT/Apache

27KB
421 代码行

actix-ws

Actix Web 的 WebSocket,无需 actors。

crates.io Documentation Version MIT or Apache 2.0 licensed
Dependency Status Download Chat on Discord

示例

use actix_web::{middleware::Logger, web, App, HttpRequest, HttpServer, Responder};
use actix_ws::Message;

async fn ws(req: HttpRequest, body: web::Payload) -> actix_web::Result<impl Responder> {
    let (response, mut session, mut msg_stream) = actix_ws::handle(&req, body)?;

    actix_web::rt::spawn(async move {
        while let Some(Ok(msg)) = msg_stream.next().await {
            match msg {
                Message::Ping(bytes) => {
                    if session.pong(&bytes).await.is_err() {
                        return;
                    }
                }
                Message::Text(msg) => println!("Got text: {msg}"),
                _ => break,
            }
        }

        let _ = session.close(None).await;
    });

    Ok(response)
}

#[actix_web::main]
async fn main() -> std::io::Result<()> {
    HttpServer::new(move || {
        App::new()
            .wrap(Logger::default())
            .route("/ws", web::get().to(ws))
    })
    .bind("127.0.0.1:8080")?
    .run()
    .await?;

    Ok(())
}

资源

许可

本项目采用以下其中一种许可协议:

任选其一。

依赖

~14–25MB
~448K SLoC