This module implements a high performance asynchronous HTTP server.
Examples
This example will create an HTTP server on port 8080. The server will respond to all requests with a 200 OK response code and "Hello World" as the response body.
import asynchttpserver, asyncdispatch var server = newAsyncHttpServer() proc cb(req: Request) {.async.} = await req.respond(Http200, "Hello World") waitFor server.serve(Port(8080), cb)
Types
Request = object client*: AsyncSocket reqMethod*: string headers*: HttpHeaders protocol*: tuple[orig: string, major, minor: int] url*: Uri hostname*: string body*: string
- The hostname of the client that made the request. Source
AsyncHttpServer = ref object socket: AsyncSocket reuseAddr: bool reusePort: bool
- Source
Procs
proc newAsyncHttpServer(reuseAddr = true; reusePort = false): AsyncHttpServer {. raises: [], tags: [].}
- Creates a new AsyncHttpServer instance. Source
proc sendHeaders(req: Request; headers: HttpHeaders): Future[void] {. raises: [FutureError], tags: [RootEffect].}
- Sends the specified headers to the requesting client. Source
proc respond(req: Request; code: HttpCode; content: string; headers: HttpHeaders = nil): Future[ void] {.raises: [FutureError], tags: [RootEffect].}
-
Responds to the request with the specified HttpCode, headers and content.
This procedure will not close the client socket.
Source proc serve(server: AsyncHttpServer; port: Port; callback: proc (request: Request): Future[void] {.closure, gcsafe.}; address = ""): Future[void] {.raises: [FutureError], tags: [WriteIOEffect, ReadIOEffect, RootEffect].}
-
Starts the process of listening for incoming HTTP connections on the specified address and port.
When a request is made by a client the specified callback will be called.
Source proc close(server: AsyncHttpServer) {.raises: [SslError, OSError], tags: [].}
- Terminates the async http server instance. Source