Documentation

http1, http2的网络转发器

// http1转发器
async fn run() -> Result<(), net_relay::Error> {
    let mut relay = hrelay::http1::Relay::build(|b| {
        b.bind("0.0.0.0:3001")
            .relay_fn(hrelay::http1::default_relay_fn)
    })
        .map(|r| r)?;

    // 连接池集合
    let pools = relay.pools();

    tokio::spawn(async move {
        tokio::time::sleep(Duration::from_secs(10)).await;
        let p =
            http_pool::http1::Pool::new("*".to_string(), Arc::new(net_pool::CHStrategy::default()));
        pools.add_pool(p);
        pools.add_backend("*", net_pool::Address::from("www.baidu.com"));
    });

    loop {
        tokio::select! {
            res = relay.run() => {
                return res;
            }
        };
    }
}

// http2转发器
async fn run() -> Result<(), net_relay::Error> {
    let mut relay = hrelay::http2::Relay::build(|b| {
        b.bind("0.0.0.0:3001")
            .relay_fn(hrelay::http2::default_relay_fn)
    })
    .map(|r| r)?;

    let pools = relay.pools();

    tokio::spawn(async move {
        tokio::time::sleep(Duration::from_secs(10)).await;
        let p = http_pool::http2::Pool::new(
            "*".to_string(),
            Arc::new(net_pool::CHStrategy::default()),
            Some(20),
        );
        pools.add_pool(p);
        pools.add_backend("*", net_pool::Address::from("127.0.0.1:30097"));
    });

    loop {
        tokio::select! {
            res = relay.run() => {
                return res;
            }
        };
    }
}