GitHub - actix/sockjs: SockJS server for rust language (original) (raw)

SockJS server for Actix framework.


Actix SockJS is licensed under the Apache-2.0 license.

Usage

To use sockjs, add this to your Cargo.toml:

[dependencies] sockjs = "0.2"

Supported transports

Simple chat example

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; }

/// 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) { ctx.broadcast("Someone joined.") } fn closed(&mut self, ctx: &mut SockJSContext, _: CloseReason) { ctx.broadcast("Someone left.") } }

/// Session has to be able to handle sockjs::Message messages impl Handler 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();

}

Full chat example