Module asynchttpserver

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