Skip to content

Instantly share code, notes, and snippets.

@masakielastic
Last active June 13, 2025 02:00
Show Gist options
  • Save masakielastic/451e77879b4a1b8fbbbc000cfb473390 to your computer and use it in GitHub Desktop.
Save masakielastic/451e77879b4a1b8fbbbc000cfb473390 to your computer and use it in GitHub Desktop.
Axum v0.8.4 h2c サーバー
[dependencies]
axum = { version = "0.8", features = "http2" }
tokio = { version = "1", features = ["full"] }
hyper = { version = "1", features = ["http2", "server"] }
hyper-util = { version = "0.1", features = ["tokio"] }
use axum::{routing::get, Router};
use hyper::server::conn::http2;
use hyper_util::{rt::tokio::{TokioIo, TokioExecutor}, service::TowerToHyperService};
use std::net::SocketAddr;
use tokio::net::TcpListener;
#[tokio::main]
async fn main() {
// Axum アプリ
let app = Router::new().route("/", get(handler));
let service = TowerToHyperService::new(app.into_service());
// バインド(HTTP/2 over cleartext = h2c)
let addr = SocketAddr::from(([127, 0, 0, 1], 8080));
let listener = TcpListener::bind(addr).await.unwrap();
println!("🚀 h2c server listening on http://{addr}");
loop {
let (tcp, _) = listener.accept().await.unwrap();
let io = TokioIo::new(tcp);
let executor = TokioExecutor::new();
let service = service.clone();
tokio::spawn(async move {
if let Err(err) = http2::Builder::new(executor)
.serve_connection(io, service)
.await
{
eprintln!("❌ h2c connection error: {err:?}");
}
});
}
}
async fn handler() -> &'static str {
"Hello from h2c server!"
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment