8 个版本

0.1.5 2024 年 6 月 7 日
0.1.4 2024 年 6 月 2 日
0.1.3 2024 年 5 月 5 日
0.1.2 2024 年 4 月 10 日
0.1.0 2023 年 12 月 25 日

#845 in 命令行工具


被用于 liblitho

MIT 许可证

60KB
1.5K SLoC

Simple-pub-sub

使用 Rust 实现的简单消息代理。

消息帧看起来像

头部 版本 数据包类型 主题长度 消息长度 填充 主题 消息
1 字节 2 字节 1 字节 1 字节 2 字节 1 字节 ..... .....

因此,它是 8 字节头部后面跟着主题和消息。

命令行使用

  • 服务器

    • 使用 Tcp 套接字

      simple-pub-sub server tcp 0.0.0.0 6480 --log-level trace
      

      要使用 TLS

      # Generate the server key and certificate
      openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem \
          -days 365 -nodes -subj "/CN=localhost"
      # generate the identity file.
      openssl pkcs12 -export -out identity.pfx -inkey key.pem -in cert.pem\
        -passout pass:password
      

      使用这些密钥启动服务器

      simple-pub-sub server tcp -c identity.pfx -p password 0.0.0.0 6480 \
        --log-level trace
      
    • 使用 Unix 套接字

      simple-pub-sub server unix /tmp/pubsub.sock --log-level trace
      
  • 客户端

    • 使用 Tcp 套接字

      • 订阅

        simple-pub-sub client subscribe the_topic tcp 0.0.0.0 6480 --log-level trace
        

        使用 TLS

        simple-pub-sub client subscribe the_topic tcp -c certs/cert.pem 0.0.0.0 6480\
            --log-level trace
        
      • 发布

        simple-pub-sub client publish the_topic the_message tcp 0.0.0.0 6480\
            --log-level info
        

        使用 TLS

        simple-pub-sub client publish the_topic the_message tcp -c certs/cert.pem\
         0.0.0.0 6480 --log-level trace
        
      • 查询

        simple-pub-sub client query the_topic tcp 0.0.0.0 6480  --log-level trace
        

        使用 TLS

        simple-pub-sub client query the_topic tcp -c certs/cert.pem\
          0.0.0.0 6480  --log-level trace
        
    • 使用 Unix 套接字

      • 订阅

        simple-pub-sub client unix /tmp/pubsub.sock subscribe the_topic\
          --log-level trace
        
      • 发布

        simple-pub-sub client unix /tmp/pubsub.sock publish the_topic the_message\
          --log-level info
        
      • 查询

        simple-pub-sub client unix /tmp/pubsub.sock query the_topic --log-level trace
        

API 使用

订阅

use simple-pub-sub

// define the on_message function (callback).
pub fn on_msg(topic: String, message: Vec<u8>) {
    println!("topic: {} message: {:?}", topic, message)
}
#[tokio::main]
async fn main() -> Result<(), String> {
    let client_type = simple_pub_sub::client::PubSubTcpClient {
        server: "localhost".to_string(),
        port: 6480,
    };
    // initialize the client.
    let mut client =
        simple_pub_sub::client::Client::new(simple_pub_sub::client::PubSubClient::Tcp(client_type));
    // set the callback function.
    client.on_message(on_msg);
    // connect the client.
    let _ = client.connect().await;
    // subscribe to the given topic.
    let _ = client.subscribe("abc".to_string()).await;
    Ok(())
}

发布消息

use simple_pub_sub;
async fn main() -> Result<(), String> {
    let client_type = simple_pub_sub::client::PubSubTcpClient {
        server: "localhost".to_string(),
        port: 6480,
    };
    // initialize the client.
    let mut client =
        simple_pub_sub::client::Client::new(simple_pub_sub::client::PubSubClient::Tcp(client_type));
    // connect the client.
    let _ = client.connect().await;
    // subscribe to the given topic.
    let _ = client
        .publish(
            "abc".to_string(),
            "test message".to_string().into_bytes().to_vec(),
        )
        .await;
    Ok(())
}

依赖项

~5–19MB
~213K SLoC