1 个不稳定版本
0.1.0 | 2023年1月26日 |
---|
#959 in 异步
43KB
1K SLoC
webrocket
WebRocket 🚀 是一个从头开始用 Rust 编写的 WebSocket 服务器库(包括 SHA-1 和 Base64)。
注意:此项目是为了学习 Rust 而创建的,因此可能会发生重大变化。
安装
要将 crates.io 上的库发布版本添加到 Cargo 项目中,请将以下内容添加到 Cargo.toml 的 'dependencies' 部分
请勿在生产环境中使用。
webrocket = "0.1.0"
用法
由于我是一个很大的 闭包 粉丝,许多函数都作为闭包提供,例如 on_connection 或 on_message。
要启动一个回显服务器,只需以下代码
let mut ws = WebSocket::bind("0.0.0.0:3000").await?;
ws.on_connection(|wsc| {
println!("New connection");
wsc.on_message(|wsc, msg| {
println!("New message: {}", msg);
wsc.send_message(msg);
});
wsc.on_close(|_, code, reason| {
println!("Connection closed ({:?}) with '{}' as reason.", code, reason);
});
});
ws.listen().await;
测试
服务器实现已通过以下方式使用 Autobahn|Testsuite 进行测试
$ RUST_LOG=debug cargo run --bin wsserver_autobahn
$ docker run -it --rm --net=host \
-v "${PWD}/tests:/config" \
-v "${PWD}/tests/reports:/reports" \
--name fuzzingclient \
crossbario/autobahn-testsuite \
wstest -m fuzzingclient --spec /config/fuzzingclient.json
代码中也有测试,可以通过 cargo test
启动。
标准
已实现
待完成
- WS: permessage-deflate
- WS: DEFLATE
- TLS v1.3
副项目
在我用 Rust 编写 WebSocket 之前,我首先用 C++ 编写了它,以学习 C++。我现在使用这个实现,它位于 fun-with-cpp
分支中,作为例如模糊测试的游乐场。
要求(cpp)
- CMake 3.22.1
brew install cmake
- C++17 兼容的编译器
检查 flags.h 中的编译选项(!)
#define COMPILE_FOR_FUZZING 0
#define ARTIFICIAL_BUGS 0
构建 & 运行
./build.sh run
构建 & 测试
./build.sh test [sha1]
依赖项
~6–15MB
~172K SLoC