swift-nio/Sources/NIOHTTP1Server
Cory Benfield b05c6f2206
Move NIO to NIOPosix, make NIO a shell. (#1936)
Motivation:

The remaining NIO code really conceptually belongs in a module called
NIOPosix, and NIOCore should really be called NIO. We can't really do
that last step, but we can prepare by pushing the bulk of the remaining
code into a module called NIOPosix.

Modifications:

- Move NIO to NIOPosix
- Make NIO an umbrella module.

Result:

NIOPosix exists.
2021-08-16 16:50:40 +01:00
..
README.md Add READMEs for the various sample applications (#117) 2018-03-09 09:06:06 -08:00
main.swift Move NIO to NIOPosix, make NIO a shell. (#1936) 2021-08-16 16:50:40 +01:00

README.md

NIOHTTP1Server

This sample application provides a HTTP server that supports a number of query methods for testing purposes. Invoke it using one of the following syntaxes:

swift run NIOHTTP1Server  # Binds the server on ::1, port 8888.
swift run NIOHTTP1Server 8988  # Binds the server on ::1, port 8988
swift run NIOHTTP1Server /path/to/unix/socket  # Binds the server using the given UNIX socket
swift run NIOHTTP1Server 192.168.0.5 8988  # Binds the server on 192.168.0.5:8988

The final three syntaxes optionally accept an additional argument, a path to a directory of files to serve from the webserver. The first syntax does not, as that would conflict with the UNIX socket path syntax.

So, for example, to spin up a local webserver on port 80 serving a specific directory, you can run:

swift run NIOHTTP1Server localhost 80 /var/www

Paths

The server has the following endpoints:

  • /: serves "Hello world!"
  • /sendfile/*: serves the file at path * to the client, using sendfile.
  • /fileio/*: serves the file at path * to the client by reading the file in to memory in chunks.
  • /dynamic/echo: Echoes the request body back to the client.
  • /dynamic/echo_balloon: Echoes the request body back to the client after buffering it entirely in memory first.
  • /dynamic/pid: Echoes pack the PID of the server.
  • /dynamic/write-delay: Echoes "Hello world" after a 100ms delay.
  • /dynamic/info: Sends information about the received request.
  • /dynamic/trailers: Sends the PID along with some HTTP trailers.
  • /dynamic/continuous: Sends a chunked body forever.
  • /dynamic/count-to-ten: Sends the numbers 1 through 10 in separate chunks.
  • /dynamic/client-ip: Sends what the server believes the client IP is.