Skip to content
This repository has been archived by the owner on Dec 21, 2019. It is now read-only.


Repository files navigation

SockJS server Build Status codecov

SockJS server for Actix framework.

Actix SockJS is licensed under the Apache-2.0 license.


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

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

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();
            // register SockJS application
                "/sockjs/", sockjs::SockJS::new(manager.clone()))})

    // let _ =;

Full chat example