Crates.io | atomic_http |
lib.rs | atomic_http |
version | 0.6.3 |
created_at | 2024-03-27 18:41:35.130957+00 |
updated_at | 2025-09-19 00:49:27.526567+00 |
description | High level HTTP server library |
homepage | https://github.com/rabbitson87/atomic_http |
repository | https://github.com/rabbitson87/atomic_http |
max_upload_size | |
id | 1188278 |
size | 41,857,494 |
고성능 HTTP 서버 라이브러리 - Arena 메모리 관리와 Zero-copy 기술을 활용한 최적화된 HTTP 서버
[dependencies]
atomic_http = { version = "0.6.0", features = ["arena"] }
arena
: Arena 메모리 관리 (기본 활성화)response_file
: 파일 응답 지원env
: 환경변수 설정 지원debug
: 디버그 출력 활성화서버와 클라이언트를 자동으로 시작하고 종합적인 테스트 실행
# Arena + Zero-copy 모드
cargo run --example integrated_test --features arena
# 표준 모드
cargo run --example integrated_test
Arena 서버와 표준 서버의 성능을 직접 비교
# Arena vs 표준 서버 성능 비교
cargo run --example comparative_benchmark --features arena
# 릴리즈 모드로 정확한 성능 측정
cargo run --release --example comparative_benchmark --features arena
파일 업로드와 멀티파트 폼 데이터 처리 테스트
# Arena 멀티파트 테스트
cargo run --example integrated_multipart_test --features arena
# 표준 멀티파트 테스트
cargo run --example integrated_multipart_test
# Arena 서버 디버그
cargo run --example debug_test --features arena -- 9999
# 표준 서버 디버그
cargo run --example debug_test -- 9999
# Arena 간단 벤치마크
cargo run --example simple_benchmark_test --features arena -- 9998
# 표준 간단 벤치마크
cargo run --example simple_benchmark_test -- 9998
# Arena 서버
cargo run --example simple_server_test --features arena -- 9080
# 표준 서버
cargo run --example simple_server_test -- 9081
# Arena 성능 테스트
cargo run --example simple_performance_test --features arena
# 표준 성능 테스트
cargo run --example simple_performance_test
Criterion을 사용한 마이크로 벤치마크:
cargo bench
필요시 개별 기능 테스트:
# 기존 서버 테스트
cargo run --example server --features arena
# 부하 테스트 클라이언트 (별도 실행)
cargo run --example load_test_client -- -n 1000 -c 50
# 파일 서빙 테스트
cargo run --example file_serving_test --features arena,response_file
# 제로카피 테스트
cargo run --example zero_copy_test --features arena
use atomic_http::*;
use http::StatusCode;
#[tokio::main]
async fn main() -> Result<(), SendableError> {
let mut server = Server::new("127.0.0.1:8080").await?;
loop {
let accept = server.accept().await?;
tokio::spawn(async move {
let (request, mut response) = accept.parse_request_arena_writer().await?;
// JSON 파싱 (Zero-copy)
let data: MyData = request.get_json_arena()?;
// 응답 생성 (Arena 할당)
let result = serde_json::json!({
"status": "success",
"data": data
});
response.body_mut().set_arena_json(&result)?;
*response.status_mut() = StatusCode::OK;
response.responser_arena().await?;
Ok::<(), SendableError>(())
});
}
}
// Arena 멀티파트 처리
match request.get_multi_part_arena()? {
Some(form) => {
// 텍스트 필드 접근
for i in 0..form.text_fields.len() {
let name = form.get_text_field_name(i);
let value = form.get_text_field_value(i);
}
// 파일 처리
for part in &form.parts {
let filename = part.get_file_name();
let file_data = part.get_body(); // Zero-copy 접근
// 파일 저장
tokio::fs::write(filename?, file_data).await?;
}
}
None => {
// JSON 또는 다른 형식 처리
}
}
환경변수를 통한 서버 설정 (env 피쳐 활성화 시):
export NO_DELAY=true
export READ_TIMEOUT_MILISECONDS=5000
export READ_BUFFER_SIZE=8192
export ROOT_PATH="/var/www"
export ZERO_COPY_THRESHOLD=1048576
export ENABLE_FILE_CACHE=true
# 기본 빌드
cargo build
# Arena + Zero-copy 모든 기능
cargo build --features arena,response_file,env
# 릴리즈 빌드
cargo build --release --features arena
# 단위 테스트
cargo test
# 통합 테스트
cargo run --example integrated_test --features arena
# 성능 벤치마크
cargo bench
Apache License 2.0
이슈와 풀 리퀘스트를 환영합니다. 주요 변경사항은 먼저 이슈를 열어 논의해 주세요.
추천 테스트 순서:
cargo run --example debug_test --features arena
- 기본 동작 확인cargo run --example simple_benchmark_test --features arena
- 간단한 벤치마크cargo run --example integrated_test --features arena
- 전체 기능 확인cargo run --example comparative_benchmark --features arena
- 성능 비교cargo bench
- 마이크로 벤치마크각 테스트는 서버와 클라이언트를 자동으로 관리하므로 별도 설정이 필요하지 않습니다.
만약 comparative_benchmark
에서 요청이 실패한다면:
기본 테스트부터 실행:
cargo run --example debug_test --features arena
간단한 벤치마크 실행:
cargo run --example simple_benchmark_test --features arena
포트 충돌 확인:
# 다른 포트 사용
cargo run --example simple_benchmark_test --features arena -- 8888
cargo clean && cargo build --features arena
--release
모드로 실행각 테스트는 상세한 로그를 출력하므로 실패 지점을 쉽게 파악할 수 있습니다.