statico-0.1.6 is not a library.
Statico
A high-performance HTTP webserver implemented in Rust that serves static responses at the speed of light. Its sole purpose is to handle HTTP requests as fast as possible; as such, it is neither a full-featured HTTP server nor an HTTP router, and it is not intended for production use beyond benchmarking.
Features
- Multi-threaded: Configurable number of worker threads
- Single-threaded Tokio runtime per thread: Each worker thread runs its own Tokio current-thread runtime
- SO_REUSEPORT: Multiple threads can bind to the same port for load balancing
- Configurable responses: Set custom HTTP status codes, headers, and response body
- File-based responses: Load response body from files using
@filenamesyntax - Optional io_uring support: Experimental support for io_uring on Linux (compile-time feature)
- Cross-platform: Works on Linux, macOS, Windows, and other Unix-like systems
Building
Standard build:
With io_uring support (Linux only):
Usage
Command Line Options
-t, --threads <THREADS>: Number of worker threads to spawn (default: number of CPU cores)-p, --port <PORT>: Port to listen on (default: 8080)-s, --status <STATUS>: HTTP status code to return (default: 200)-b, --body <BODY>: Response body content (optional, default: empty). Use@filenameto load from file--header <HEADER>: Custom headers in "Name: Value" format (can be specified multiple times)--uring: Use io_uring runtime (Linux only, requiresio_uringfeature)
Examples
Basic usage
Start a server on port 8080 with default settings:
Custom port and threads
Serve custom content with headers
Serve JSON response
Error response simulation
Load testing setup
# Start server with many threads for high concurrency
With io_uring (Linux only)
# Requires compilation with --features io_uring
Serve content from files
# Serve JSON response from file
# Serve HTML page from file
# Serve any file content
Architecture
Threading Model
- The main thread parses command line arguments and spawns worker threads
- Each worker thread creates its own socket bound to the same port using SO_REUSEPORT
- Each worker thread runs a single-threaded Tokio runtime (
current_thread) - The kernel load-balances incoming connections across threads
Socket Reuse
- Linux/Android: Uses
SO_REUSEPORTfor true load balancing across threads - Other Unix systems: Falls back to
SO_REUSEADDR(connections handled by one thread) - Windows: Uses
SO_REUSEADDR
io_uring Support
The io_uring feature provides experimental support for Linux's io_uring interface:
- Compile with
--features io_uring - Run with
--uringflag - Currently provides a simplified implementation (only HTTP1.1 is supported)
Use Cases
- Load testing: Generate consistent HTTP responses for testing client applications
- Mocking services: Simulate API endpoints with specific status codes and responses
- Static file serving: Serve static content from files without a full web server
- Health checks: Provide simple health check endpoints
- Benchmarking: Test HTTP client performance with minimal server overhead
- Development: Quick HTTP server for development and testing scenarios
Performance
Statico is designed for high performance:
- Minimal request processing overhead
- Efficient multi-threading with SO_REUSEPORT load balancing
- Single-threaded Tokio runtimes reduce context switching
- Zero-allocation response serving (responses are pre-built and cached)
- File content loaded once at startup for optimal performance
- With io_uring support, Statico is up to 40% faster than the hyper version
Testing
Test the server with curl:
# Basic test
# With verbose output to see headers
# Load test with Apache Bench
License
This project is provided as-is for educational and practical use.