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
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