server.route("/api/users", get_users).await;
server.route("/api/users/{id}", get_user_by_id).await;
server.route("/api/users/{id:\\d+}", get_user_by_id).await;
async fn get_user_by_id(ctx: Context) { let user_id = ctx.get_route_param("id").await; let user = find_user_by_id(user_id).await; ctx.set_response_body_json(&user).await;}
async fn auth_middleware(ctx: Context) { let token = ctx.get_request_header("authorization").await; if let Some(token) = token { if validate_token(&token).await { return; // Tiếp tục xử lý } } ctx.set_response_status_code(401) .await .set_response_body("Unauthorized") .await;}
async fn logging_middleware(ctx: Context) { let start_time = std::time::Instant::now(); let method = ctx.get_request_method().await; let path = ctx.get_request_path().await; let duration = start_time.elapsed(); println!("{} {} - {}ms", method, path, duration.as_millis());}
// Đăng ký middlewareserver.request_middleware(auth_middleware).await;server.response_middleware(logging_middleware).await;
pub async fn cross_middleware(ctx: Context) { ctx.set_response_header("ACCESS_CONTROL_ALLOW_ORIGIN", "*").await; ctx.set_response_header("ACCESS_CONTROL_ALLOW_METHODS", "GET, POST, OPTIONS").await; ctx.set_response_header("ACCESS_CONTROL_ALLOW_HEADERS", "*").await;}
async fn timeout_middleware(ctx: Context) { spawn(async move { timeout(Duration::from_millis(100), async move { ctx.aborted().await; ctx.set_response_status_code(200).await; ctx.set_response_body("timeout").unwrap(); }).await.unwrap(); });}
#[ws]#[get]async fn websocket_handler(ctx: Context) { loop { let message = ctx.get_request_body().await; let response = process_message(&message).await; let _ = ctx.set_response_body(response).await.send_body().await; }}
const ws = new WebSocket('ws://localhost:60000/websocket');ws.onopen = () => { console.log('WebSocket opened'); setInterval(() => { ws.send(`Now time: ${new Date().toISOString()}`); }, 1000);};ws.onmessage = (event) => { console.log('Receive: ', event.data);};
pub async fn sse_handler(ctx: Context) { let _ = ctx .set_response_header("CONTENT_TYPE", "text/event-stream") .await .set_response_status_code(200) .await .send() .await; for i in 0..10 { let _ = ctx .set_response_body(format!("data:{}\n\n", i)) .await .send_body() .await; sleep(Duration::from_secs(1)).await; } let _ = ctx.closed().await;}
Framework | QPS (Yêu cầu trên giây) | Độ trễ |
---|---|---|
Tokio (Raw) | 340,130.92 | Thấp |