No description
Find a file
2026-09-01 13:11:58 +02:00
.woodpecker chore: migrate CI to .woodpecker/{push,branch}.yml 2026-09-01 13:11:58 +02:00
src fix: content audit corrections (accuracy, coherence, concordância, tests) 2026-09-01 13:11:58 +02:00
tests fix: content audit corrections (accuracy, coherence, concordância, tests) 2026-09-01 13:11:58 +02:00
.gitignore Initial commit 2026-09-01 11:11:36 +00:00
Cargo.lock initial content 2026-09-01 13:11:55 +02:00
Cargo.toml chore: declare MSRV 1.85 (edition 2024) 2026-09-01 13:11:58 +02:00
LICENSE chore: add AGPL-3.0 license and standard .gitignore 2026-09-01 13:11:58 +02:00
README.md fix: content audit corrections (accuracy, coherence, concordância, tests) 2026-09-01 13:11:58 +02:00

Lição 50: 🏆 Projeto Final — Servidor Web Multithread

1. Narrativa

Tudo que o piloto aprendeu converge neste momento. A Academia Æther convoca o piloto para construir o sistema central do mecha: um servidor web que coordena sensores, processa requisições, gerencia estado e serve dados em tempo real. Este projeto combina ownership, traits, smart pointers, módulos e tudo mais aprendido nas 49 lições anteriores. O resultado final é um servidor funcional construído do zero.

Nota sobre concorrência: o ThreadPool desta lição é uma simulação — uma estrutura de dados com workers, sem threads reais. A concorrência real com std::thread e channels é exercitada nas lições 41 e 42. Aqui o foco é a modelagem do estado compartilhado com Arc<Mutex<T>> e o roteamento de requisições.

2. Conceito

Um servidor web multithread combina os principais conceitos de Rust:

  • ThreadPool (simulado): Estrutura de dados com workers que representa o pool de processamento (concorrência real nas lições 41/42)
  • Arc<Mutex>: Estado compartilhado entre workers
  • Funções como handlers: rotear despacha cada requisição para a função de processamento correta (processar_get, processar_post) via pattern matching
  • Enums + Pattern Matching: Roteamento de endpoints
  • Result/Option: Tratamento de erros em toda a pipeline
  • Smart Pointers: Arc<Mutex<EstadoServidor>> para compartilhar estado entre threads com segurança

3. Requisitos

  • Criar ThreadPool com workers
  • Implementar tipo HttpRequest/HttpResponse
  • Gerenciar estado do servidor com Arc
  • Criar sistema de rotas com pattern matching
  • Implementar despacho de requisições para as funções de processamento corretas (GET/POST)

4. Design de Dados

graph TD
    A[Listener] --> B[ThreadPool]
    B --> C[Worker 1]
    B --> D[Worker 2]
    B --> E[Worker N]
    C --> F[rotear]
    D --> F
    E --> F
    F --> G[Estado Compartilhado Arc Mutex]
    F --> H[Response]

5. Diagrama de Fluxo

flowchart TD
    A[Receber Request] --> B[Parse HTTP]
    B --> C{Rota existe?}
    C -->|Sim| D[Executar processar_get/processar_post]
    C -->|Não| E[404 Not Found]
    D --> F{Processamento ok?}
    F -->|Sim| G[Retornar Response]
    F -->|Não| H[500 Internal Error]
    E --> I[Enviar resposta]
    G --> I
    H --> I

6. Funções

Função Descrição
criar_resposta Cria HttpResponse com status e corpo
parsear_requisicao Faz parse de string HTTP em HttpRequest
rotear Direciona requisição para handler correto
estado_inicial Cria estado inicial do servidor
incrementar_contador Incrementa contador no estado compartilhado
processar_get Processa requisição GET
processar_post Processa requisição POST
criar_pool Cria ThreadPool simulado

7. Exemplo

let estado = estado_inicial();
incrementar_contador(&estado, "visitas");
let req = parsear_requisicao("GET /status HTTP/1.1");
let resp = rotear(&req, &estado);
assert_eq!(resp.status, 200);

8. Missão

  1. Implementar criar_resposta construindo HttpResponse
  2. Implementar parsear_requisicao extraindo método, rota e versão
  3. Implementar rotear com pattern matching em rotas
  4. Implementar estado_inicial criando estado com Arc
  5. Implementar incrementar_contador modificando estado compartilhado
  6. Implementar processar_get retornando dados do estado
  7. Implementar processar_post atualizando estado via POST
  8. Implementar criar_pool criando estrutura de ThreadPool

9. Como Executar

cargo build
cargo test
cargo clippy -- -D warnings
cargo fmt --check

10. Dicas

  • Use Arc<Mutex<T>> para todo estado compartilhado
  • HttpRequest pode ser um enum com variants para cada método
  • O ThreadPool é uma simulação: crie a estrutura com workers e tamanho sem threads reais
  • Em um ThreadPool real, cada worker seria uma thread recebendo jobs de um canal (lições 41/42)
  • Response deve ter status code, headers e body
  • Este projeto é a culminação de todas as 49 lições anteriores