#websocket-server #websocket #async #non-blocking #future #async-await

ws-gonzale

使用 async/await 实现的简单WebSocket服务器

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

0.5.0 2020年8月8日
0.4.1 2020年7月26日
0.3.1 2020年7月26日
0.2.3 2020年7月26日
0.1.4 2020年7月22日

#1555异步

MIT/Apache

42KB
908

Ws-Gonzale

Ws Gonzale的目标是成为一个异步ws服务器,仅此而已。

目前它只是最简单的表示形式,并且还不完全兼容

我还想包括一些关于“存在”和共享数据的优秀示例。

我不想仅仅复制另一个框架。

示例/生命周期的基本概述

+--------+       +--------------+     +------+
| Client |<----->| WsConnection |<----| MPMC |<-------<-------.
+--------+       +--------------+     +------+                |
                                 \                            |
+--------+       +--------------+ \         +------+      +---+---------------+
| Client |<----->| WsConnection |--*--->----| MPMC |-->->-| Server lifecycle  |
+--------+       +--------------+           +------+      +--------+----------+
                                 \                       /
+--------+       +-----------+    \         +------+    /
| Client |------>| handshake |     '---<-<--| MPMC |<--*
+--------+       |___________|              +------+

查看示例

如果您想运行一个简单的WS服务器

cargo run --example life-cycle

基准测试

Rust基准测试

cargo run bench

使用artillery

首先启动测试服务器

cargo run --example life-cycle

然后在另一个窗口中运行

artillery run benches/artillery.yml

常见问题解答

为什么不使用X库?

这只是为了玩玩,这样我才能适应来自NodeJS背景的多线程环境。

那里有很多优秀的Rust开发者;但有时略微不那么高级的方法可以帮助人们学习一些基本概念。

这个项目将走向何方?

查看问题

这个项目的名字从何而来?

Speedy gonzales

WS协议

这是对WS协议最懒散的实现。目前它只支持握手和发送基本消息。https://tools.ietf.org/html/rfc6455

我可以贡献力量吗?

随时可以

依赖关系

~6–19MB
~218K SLoC