Servidor HTTP
Un servidor HTTP mínimo usando http_serve de std/http. La función handler recibe un array de request ya parseado [type, method, path, headers, body] y retorna un string de respuesta HTTP construido con http_response. El servidor se bloquea en un bucle de accept, manejando una petición a la vez.
Código
// Minimal HTTP server using std/http
import "std/http"
fn on_request(req: Array) -> String {
let method: String = req[1]
let path: String = req[2]
if path == "/" {
return http_response(200, "Hello from Nyx!")
}
if path == "/time" {
let t: int = time()
return http_response(200, "timestamp: " + int_to_string(t))
}
return http_response(404, "not found: " + path)
}
fn main() -> int {
print("listening on :8080")
http_serve(8080, on_request)
return 0
}
Salida
listening on :8080
Explicación
http_serve(port, handler) escucha en el puerto indicado y entra en un bucle de accept infinito. Para cada conexión, parsea la petición HTTP en un array, llama a la función handler, envía la respuesta y cierra la conexión.
http_response(status, body) construye una respuesta HTTP/1.1 correctamente formateada con los headers Content-Length y Connection: close. Para headers personalizados (como Content-Type: application/json), usa http_response_with_headers.
Para servir con múltiples hilos, usa http_serve_mt(port, num_workers, handler), que despacha las conexiones a un pool de hilos mediante channels — así es como nyx-serve logra 73K req/s.