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.
// Minimal HTTP server using std/http // Servidor HTTP mínimo usando 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 blocks, accepting connections in a loop // Each request calls on_request and sends the response // Siempre se chequea el retorno del bind: si el puerto esta ocupado, // http_serve devuelve -1 y el programa seguiria "corriendo" sin servidor. if http_serve(8080, on_request) < 0 { print("no se pudo bindear el puerto 8080") return 1 } return 0 }
listening on :8080
Cómo funciona
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. Solo retorna en caso de fallo — un valor negativo cuando el puerto no se puede enlazar —, así que este ejemplo revisa ese retorno y sale con estado 1 en vez de aparentar que está sirviendo.
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 — el mismo camino que toma un servidor HTTP de producción escrito en Nyx.