Быстрый старт¶
QOL использование — в процессе.
Сборка¶
Workspace состоит из 4 крейтов — собираются все сразу. Результат:
target/release/server— бинарник сервераtarget/release/fe2o3-bench— бинарник бенчмарка
Запуск сервера¶
# По умолчанию: 0.0.0.0:7427
cargo run -p server --release
# Кастомный адрес
cargo run -p server --release -- 127.0.0.1 9000
Сервер слушает Ctrl-C для graceful shutdown.
Пример: Publisher¶
use sharp::{Connection, Data, Message, Packet, PacketType};
use client::publisher::{Publish, Publisher};
use bytes::Bytes;
use std::time::Duration;
#[tokio::main]
async fn main() {
let publisher = Publisher::new(
"127.0.0.1:7427".to_string(),
Connection::publisher("my_queue".to_string()),
).await.unwrap();
// Fire-and-forget (без трекинга)
let pkt = Packet::new(PacketType::Standard, Data::Message(Message::new(Bytes::from("hello"))));
publisher.forget_publish(pkt).await;
// С подтверждением
let pkt = Packet::new(PacketType::Durable, Data::Message(Message::new(Bytes::from("important"))));
let nonce = pkt.nonce;
publisher.publish(pkt).await;
publisher.wait_for_ack(nonce, Duration::from_secs(5)).await.unwrap();
}
Пример: Subscriber¶
use sharp::Connection;
use client::subscriber::{Subscribe, Subscriber};
#[tokio::main]
async fn main() {
let subscriber = Subscriber::new(
"127.0.0.1:7427".to_string(),
Connection::subscriber("my_queue".to_string()),
).await.unwrap();
let mut rx = subscriber.subscribe().await;
while let Some(packet) = rx.recv().await {
let msg = packet.message().unwrap();
println!("Received: {} bytes", msg.data.len());
subscriber.ack(&packet).await;
}
}
Запуск бенчмарков¶
# Интерактивный режим (меню)
cargo run -p bench --release
# Fire-and-forget: 1M сообщений по 16KB
cargo run -p bench --release -- -m fire-and-forget -c 1000000 -s 16384
# С подтверждениями: 100K сообщений
cargo run -p bench --release -- -m with-ack -c 100000
# End-to-end pub-sub
cargo run -p bench --release -- -m pub-sub -c 500000 -a 127.0.0.1:7427 -q bench_queue
# Durable с WAL
cargo run -p bench --release -- -m wal -c 100000 -s 1024