#actix-web #actix #web #http

sockjs

Actix的SockJS服务器

4个版本 (2个破坏性更新)

使用旧的Rust 2015

0.3.0 2018年4月19日
0.2.1 2018年3月12日
0.2.0 2018年3月3日
0.1.0 2017年10月31日

#181 in #actix

MIT/Apache

105KB
2.5K SLoC

SockJS服务器 构建状态 codecov

SockJS 是为 Actix框架 提供的服务器。


Actix SockJS遵循 Apache-2.0许可证

用法

要使用 sockjs,将以下内容添加到您的 Cargo.toml

[dependencies]
sockjs = "0.2"

支持的传输方式

简单的聊天示例

extern crate actix;
extern crate actix_web;
extern crate sockjs;

use actix_web::*;
use actix::prelude::*;
use sockjs::{Message, Session, CloseReason, SockJSManager, SockJSContext};

struct Chat;

/// `SockJSContext` context is required for sockjs session
impl Actor for Chat {
    type Context = SockJSContext<Self>;
}

/// Session has to implement `Default` trait
impl Default for Chat {
    fn default() -> Chat { Chat }
}

/// Sockjs session trait
impl Session for Chat {
    fn opened(&mut self, ctx: &mut SockJSContext<Self>) {
        ctx.broadcast("Someone joined.")
    }
    fn closed(&mut self, ctx: &mut SockJSContext<Self>, _: CloseReason) {
        ctx.broadcast("Someone left.")
    }
}

/// Session has to be able to handle `sockjs::Message` messages
impl Handler<Message> for Chat {
    type Result = ();

    fn handle(&mut self, msg: Message, ctx: &mut SockJSContext<Self>)
    {
        // broadcast message to all sessions
        ctx.broadcast(msg);
    }
}


fn main() {
    let sys = actix::System::new("sockjs-chat");

    // SockJS sessions manager
    let sm: Addr<Syn, _> = SockJSManager::<Chat>::start_default();

    HttpServer::new(move || {
        let manager = sm.clone();
        Application::new()
            // register SockJS application
            .handler(
                "/sockjs/", sockjs::SockJS::new(manager.clone()))})
        .bind("127.0.0.1:8080").unwrap()
        .start();

    // let _ = sys.run();
}

完整的聊天示例

依赖关系

~25MB
~476K SLoC