1 unstable release
0.1.0 | Jul 28, 2024 |
---|
#688 in HTTP server
34KB
765 lines
http_lolo
A simple, lightweight, single-threaded HTTP server with non-blocking I/O for concurrent operation handling.
Features
- Single-threaded architecture with non-blocking I/O
- Concurrent request handling using epoll
- Simple and intuitive API for route handling
- Support for multiple server instances
- Customizable request and response handling
Installation
Add this to your Cargo.toml
:
[dependencies]
http_lolo = "0.1.0"
Quick Start
use http_lolo::{HttpServer, Request, ResponseWriter};
fn main() {
let server = HttpServer::new();
server.handle_route("/", Box::new(|_: &mut Request, w: &mut ResponseWriter| {
w.write_string("Hello, World!".to_string());
}));
server.listen_on("127.0.0.1:8080");
HttpServer::run_all();
}
Usage
Creating a new server instance
let server = HttpServer::new();
adding a route handler
server.handle_route("/", Box::new(|_: &mut Request, w: &mut ResponseWriter| {
w.write_string("Hello, World!".to_string());
}));
Starting the server
server.listen_on("127.0.0.1:8080");
HttpServer::run_all();
Handling requests
Inside your route handler, you can access request data and write responses:
|req: &mut Request, resp: &mut ResponseWriter| {
// Access request data
println!("Method: {}", req.method);
println!("Path: {}", req.path);
// Write response
resp.set_status(200);
resp.write_string("Response content".to_string());
}
Advanced Usage
Multiple server instances
You can create multiple server instances listening on different ports:
let server1 = HttpServer::new();
let server2 = HttpServer::new();
// Add route handlers to server1 and server2
server1.listen_on("127.0.0.1:8080");
server2.listen_on("127.0.0.1:8081");
HttpServer::run_all();
JSON responses
use http_lolo::JsonValue;
resp.write_json(json::object!{
"key" => "value",
"number" => 42
});
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
Dependencies
~12–22MB
~361K SLoC