Skip to main content

Module proxy

Module proxy 

Source
Expand description

Message proxy (broker) implementation for ZeroMQ patterns.

A proxy connects frontend and backend sockets, forwarding messages bidirectionally. This enables common patterns like message brokers, load balancers, and forwarders without application logic.

§Supported Patterns

  • PUB-SUB broker: XSUB frontend ←→ XPUB backend
  • REQ-REP load balancer: ROUTER frontend ←→ DEALER backend
  • PUSH-PULL forwarder: PULL frontend ←→ PUSH backend

§Message Flow

Publishers → XSUB (frontend) → XPUB (backend) → Subscribers
Clients    → ROUTER (frontend) → DEALER (backend) → Workers

§Example: PUB-SUB Broker

use monocoque_zmtp::proxy::{proxy, ProxySocket};
use monocoque_zmtp::xsub::XSubSocket;
use monocoque_zmtp::xpub::XPubSocket;

#[compio::main]
async fn main() -> std::io::Result<()> {
    // Publishers connect to 5555
    let mut frontend = XSubSocket::bind("127.0.0.1:5555").await?;

    // Subscribers connect to 5556
    let mut backend = XPubSocket::bind("127.0.0.1:5556").await?;

    // Forward messages and subscriptions bidirectionally
    proxy(&mut frontend, &mut backend, None).await?;
    Ok(())
}

§Example: REQ-REP Load Balancer

use monocoque_zmtp::proxy::{proxy, ProxySocket};
use monocoque_zmtp::router::RouterSocket;
use monocoque_zmtp::dealer::DealerSocket;

#[compio::main]
async fn main() -> std::io::Result<()> {
    // Clients connect to 5555
    let mut frontend = RouterSocket::bind("127.0.0.1:5555").await?;

    // Workers connect to 5556
    let mut backend = DealerSocket::bind("127.0.0.1:5556").await?;

    // Load balance requests across workers
    proxy(&mut frontend, &mut backend, None).await?;
    Ok(())
}

Enums§

ProxyCommand
Control commands for steerable proxy.

Traits§

ProxySocket
Socket types that can participate in a proxy.

Functions§

proxy
Run a bidirectional message proxy between frontend and backend sockets.
proxy_steerable
Run a steerable bidirectional message proxy with control socket.