Skip to content

Быстрый старт

QOL использование — в процессе.

Сборка

cargo build --release

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