9 releases (1 stable)
Uses new Rust 2024
new 1.0.0 | Apr 27, 2025 |
---|---|
0.5.0 | Apr 21, 2025 |
0.4.0 | Apr 19, 2025 |
0.3.0 | Apr 18, 2025 |
0.1.0 | Mar 31, 2025 |
#213 in HTTP server
652 downloads per month
38KB
752 lines
COA - webserver
Valentin Dassonville (valentin.dassonville2.etu@univ-lille.fr)
Toutes les features requises ont été développé mais la partie "additionnel" n'a pas pu être abordé par manque de temps.
Développement - Déploiement
Le projet fournit une Library crate ainsi qu'une Binary crate utilisant la Library crate.
Le développement du projet a été réalisé en créant les modules un par un. Chaque module a été testé et documenté afin de sortir une release à chaque fois. Le détail et la progression des releases est disponible dans le fichier CHANGELOG.md.
La branche main est la branche principale et contient le code de la dernière release.
La seconde branche est la branche develop qui est la branche où l'on merge les features avant de créer une release sur main. Un push sur main lance un déploiement de la CI/CD qui permet de créer une release automatiquement sur Crates.io.
La documentation de la crate est généré sur Gitlab Pages ici : https://gitlabpages.univ-lille.fr/valentin.dassonville2.etu/coa-webserver/coa_website
Library crate
La Library crate est séparé en plusieurs modules :
- http : contient les versions, méthodes et codes HTTP
- config : contient la configuration du serveur web
- logger : gère les logs des requêtes
- request : parser de requête
- response : builder pattern pour les réponses
- stats : statistiques du serveur web
- router : routeur des fichiers statiques et de la route dynamique "/stats"
- server : serveur http asynchrone permettant de gérer les requêtes entrante
Points intéressantes
- Tout est async avec tokio permettant de gérer beaucoup de requêtes en même temps
- Distinction claire des features dans des modules séparés
- Pattern Builder dans le module response
- Sérialization avec serde
- Utilisation constante des
Option
etResult
de Rust - Etat de base d'un serveur à l'aide du trait
Default
Tests
Chaque module contient ses tests unitaires et des tests d'intégration sont disponible dans /tests/integration_server.rs.
Les tests peuvent être lancés en faisant cargo test
.
Binary crate
Une Binary crate a été créée pour montrer comment utiliser la lib crate.
Il faut lancer la méthode start d'un Server
dans un runtime async. Ici tokio a été utilisé.
use coa_website::server::Server;
#[tokio::main]
async fn main() -> std::io::Result<()> {
Server::with_address_and_config("127.0.0.1:8080", "config.toml").unwrap().start().await?;
Ok(())
}
Elle utilise le fichier de configuration config.toml et sert les fichiers se trouvant le dossier public.
Dependencies
~7–17MB
~250K SLoC