30次发布
0.8.6 | 2024年5月24日 |
---|---|
0.8.5 | 2023年6月16日 |
0.8.1 | 2023年5月29日 |
0.7.0 | 2023年3月13日 |
0.1.1 | 2020年12月25日 |
#77 in HTTP客户端
每月107次下载
105KB
2.5K SLoC
vertx-rust
简介
vertx-rust 是vert.x 在Rust中的简单实现。vertx-rust引擎基于crossbeam-channel 和 tokio,作为一个多线程非阻塞事件驱动引擎。目前,唯一实现是基于zookeeper作为集群管理器和独立实例的集群版本。未来还将有其他集群管理器的实现。
功能
- 非阻塞事件总线消费者 | local_consumer
- 非阻塞事件总线请求
- 非阻塞事件总线发送
- 非阻塞事件总线发布
- 非阻塞多线程tcp服务器 - 基于 tokio
- 非阻塞多线程http服务器 - 基于 hyper
- 阻塞和非阻塞简单的 hyper http客户端包装器
- Zookeeper集群管理器
基准测试
在AMD Ryzen 7 3800X上的基准测试
Wrk基准测试
来自 no_cluster 示例的http服务器
wrk -d 90s -t 5 -c 500 http://127.0.0.1:9092/
Running 2m test @ http://127.0.0.1:9092/
5 threads and 500 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 1.36ms 715.49us 26.70ms 70.35%
Req/Sec 74.64k 8.17k 92.34k 59.76%
33426081 requests in 1.50m, 3.89GB read
Requests/sec: 371207.38
Transfer/sec: 44.25MB
来自 no_cluster 示例的tcp服务器
wrk -d 90s -t 5 -c 500 http://127.0.0.1:9091/
Running 2m test @ http://127.0.0.1:9091/
5 threads and 500 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 1.45ms 768.63us 11.52ms 70.22%
Req/Sec 70.55k 8.68k 103.19k 75.66%
31591444 requests in 1.50m, 3.56GB read
Requests/sec: 350878.94
Transfer/sec: 40.49MB
微型基准测试
serialize_cycles time: [260.7716 cycles 261.2144 cycles 261.6987 cycles]
Found 7 outliers among 100 measurements (7.00%)
1 (1.00%) low mild
3 (3.00%) high mild
3 (3.00%) high severe
deserialize_cycles time: [325.4613 cycles 325.8329 cycles 326.2337 cycles]
Found 6 outliers among 100 measurements (6.00%)
4 (4.00%) high mild
2 (2.00%) high severe
serialize_message time: [66.672 ns 67.425 ns 68.939 ns]
Found 3 outliers among 100 measurements (3.00%)
2 (2.00%) high mild
1 (1.00%) high severe
deserialize_message time: [70.224 ns 70.403 ns 70.592 ns]
Found 6 outliers among 100 measurements (6.00%)
4 (4.00%) high mild
2 (2.00%) high severe
vertx_request time: [4.5056 us 4.5872 us 4.6704 us]
Found 6 outliers among 100 measurements (6.00%)
6 (6.00%) high mild
vertx_send time: [274.87 ns 281.62 ns 289.84 ns]
Found 8 outliers among 100 measurements (8.00%)
6 (6.00%) high mild
2 (2.00%) high severe
vertx_publish time: [274.64 ns 279.26 ns 284.22 ns]
Found 5 outliers among 100 measurements (5.00%)
5 (5.00%) high mild
与vertx-rust一起工作
代码示例
事件总线消费者
use vertx_rust::vertx::{VertxOptions, Vertx, NoClusterManager};
let vertx_options = VertxOptions::default();
let vertx : Vertx<NoClusterManager> = Vertx::new(vertx_options);
let event_bus = vertx.event_bus().await;
event_bus.consumer("test.01", move |m, _| {
Box::pin( async {
m.reply(..);
})
});
vertx.start().await;
事件总线发送
use vertx_rust::vertx::{VertxOptions, Vertx, NoClusterManager};
let vertx_options = VertxOptions::default();
let vertx : Vertx<NoClusterManager> = Vertx::new(vertx_options);
let event_bus = vertx.event_bus().await;
event_bus.send("test.01", Body::String("Hello World".to_string()));
事件总线请求
use vertx_rust::vertx::{VertxOptions, Vertx, NoClusterManager};
let vertx_options = VertxOptions::default();
let vertx : Vertx<NoClusterManager> = Vertx::new(vertx_options);
let event_bus = vertx.event_bus().await;
event_bus.request("test.01", Body::String("Hello World".to_string()), move |m, _| {
Box::pin(async move {
...
})
});
tcp服务器
use vertx_rust::vertx::{VertxOptions, Vertx, NoClusterManager};
use vertx_rust::net::NetServer;
let vertx_options = VertxOptions::default();
let vertx : Vertx<NoClusterManager> = Vertx::new(vertx_options);
let event_bus = vertx.event_bus().await;
let net_server = NetServer::new(Some(event_bus.clone()));
net_server.listen(9091, move |_req, ev| {
let mut resp = vec![];
...
resp
});
vertx.start().await;
更多示例请参阅:examples
依赖项
~12–26MB
~398K SLoC