Nyx con Ejemplos

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.

← Anterior Siguiente →

Source: examples/by-example/51-http-server.nx