use net_relay::RelayExt;
use std::sync::Arc;
use std::time::Duration;
use http_pool::net_pool::{Address, CHStrategy, debug, Pool};
#[tokio::main]
async fn main() {
init_log();
if let Err(_e) = run().await {
debug!("run error:{:?}", _e);
}
}
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 mut p =
http_pool::http1::Pool::new(Arc::new(CHStrategy::default()));
p.set_id("*");
pools.add_pool(p);
pools.add_backend("*", None, Address::from("www.baidu.com"));
});
loop {
tokio::select! {
res = relay.run() => {
return res;
}
};
}
}
fn init_log() {
#[cfg(feature = "tracing")]
{
tracing_subscriber::fmt()
.with_max_level(tracing::Level::TRACE)
.init();
}
}