#selium #messaging #platform #cargo #codec #composable #friendly

构建 selium-std

selium-std 是 Selium 的依赖库。请不要直接使用。

5 个版本

0.2.3 2024 年 5 月 6 日
0.2.2 2024 年 2 月 15 日
0.2.1 2023 年 12 月 24 日
0.2.0 2023 年 12 月 17 日
0.1.0 2023 年 10 月 19 日

#160构建工具


用于 3 crate

MPL-2.0 许可证

120KB
2K SLoC

Selium

Crates.io MPL2 licensed Build Status Audit Status

Selium 是一个极为开发者友好的、可组合的消息平台,无需构建时配置。

入门指南

Hello World

首先,创建一个新的 Cargo 项目

$ cargo new --bin hello-selium
$ cd hello-selium
$ cargo add futures
$ cargo add -F std selium
$ cargo add -F macros,rt tokio

将以下代码复制到 hello-world/src/main.rs

use futures::{SinkExt, StreamExt};
use selium::{prelude::*, std::codecs::StringCodec};

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let connection = selium::client()
        .with_certificate_authority("certs/client/ca.der")? // your Selium cert authority
        .with_cert_and_key(
            "certs/client/localhost.der",
            "certs/client/localhost.key.der",
        )? // your client certificates
        .connect("127.0.0.1:7001") // your Selium server's address
        .await?;

    let mut publisher = connection
        .publisher("/some/topic") // choose a topic to group similar messages together
        .with_encoder(StringCodec) // allows you to exchange string messages between clients
        .open() // opens a new stream for sending data
        .await?;

    let mut subscriber = connection
        .subscriber("/some/topic") // subscribe to the publisher's topic
        .with_decoder(StringCodec) // use the same codec as the publisher
        .open() // opens a new stream for receiving data
        .await?;

    // Send a message and close the publisher
    publisher.send("Hello, world!".into()).await?;
    publisher.finish().await?;

    // Receive the message
    if let Some(Ok(message)) = subscriber.next().await {
        println!("Received message: {message}");
    }

    Ok(())
}

为了测试、开发 Selium 或直接进入操作,您可以使用 selium-tools CLI 生成用于 mTLS 的一组自签名证书。

要这样做,安装 selium-tools 二进制文件,然后运行 gen-certs 命令。默认情况下,gen-certs 将将证书输出到 certs/client/*certs/server/*。您可以使用 -s-c 参数分别覆盖这些路径。

$ cargo install selium-tools
$ cargo run --bin selium-tools gen-certs

接下来,打开一个新的终端窗口并启动一个新的 Selium 服务器,提供上一步生成的证书。

$ cargo install selium-tools
$ cargo install selium-server
$ cargo run --bin selium-server -- \
  --bind-addr=127.0.0.1:7001 \
  --ca certs/server/ca.der \
  --cert certs/server/localhost.der \
  --key certs/server/localhost.key.der

最后,在我们的原始终端窗口中运行客户端

$ cargo run

运行基准测试

在仓库中包含一个 benchmarks 二进制文件,其中包含发布/订阅客户端的端到端基准测试。

这些基准测试衡量客户端上消息有效负载的编码/解码性能,以及 Selium 服务器的响应性。

要使用默认选项运行基准测试,请执行以下命令

$ cd benchmarks
$ cargo run --release

这将使用为基准配置参数提供的默认值运行基准测试,应产生类似于以下摘要的总结

$ cargo run --release

Benchmark Results
---------------------
Number of Messages: 1,000,000
Number of Streams: 10
Message Size (Bytes): 32

| Duration             | Total Transferred    | Avg. Throughput      | Avg. Latency         |
| 1.3476 Secs          | 30.52 MB             | 22.65 MB/s           | 1347.56 ns           |

如果默认配置不足以满足需求,请执行以下命令以查看基准测试参数列表。

$ cargo run -- --help

下一步

Selium是一个基于代理的消息平台,这意味着它包含客户端和服务器组件。查看clientserver的详细信息。

我们还提供了用户指南,其中包含了所有这些信息以及更多内容。我们的入门章节将指导您在5分钟或更短的时间内设置一个安全、可工作的Selium平台。

为Selium做出贡献

我们非常期待您的帮助!如果您想要某个功能,请首先提出一个问题,以避免失望。虽然我们乐于合并符合我们路线图的项目贡献,但您的功能可能并不完全适合。最好先检查一下。

依赖项

~7–21MB
~286K SLoC