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
105KB
2.5K SLoC
SockJS服务器
Actix SockJS遵循 Apache-2.0许可证。
用法
要使用 sockjs
,将以下内容添加到您的 Cargo.toml
[dependencies]
sockjs = "0.2"
支持的传输方式
- websocket
- xhr-streaming
- xhr-polling
- iframe-xhr-polling
- iframe-eventsource (EventSource 从一个 iframe 通过 postMessage 使用)
- iframe-htmlfile (HtmlFile 从一个 iframe 通过 postMessage 使用)。
- jsonp-polling
简单的聊天示例
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