github.com/slimane-swift/Skelton

An asynchronous http server for Swift


License
MIT

Documentation

Skelton

An asynchronous http server for Swift that adopts open-swift

This is Web Server Layer for Slimane

Usage

Super easy!

import Skelton

let server = Skelton { getLoad in
    let (request, stream) = try! getLoad()
    var res = Response(headers: [
      "Date": Time.rfc1123
    ])

    stream.send("\(res.description)\r\nHello!".data)
    try! stream.close()
}

try! server.bind(host: "127.0.0.1", port: 8888)
try! server.listen()

Documention

Request, Response

https://github.com/open-swift/S4

We are using S4.Request and S4.Response

Streaming

Skelton Server Supports Transfer-Encoding: Chunked in HTTP/1.1
Here is Example that respond large data with less memory.

import Skelton

var server = Skelton() {
    do {
        let (request, stream) = try $0()
        var res = Response(headers: [
          "Date": Time.rfc1123,
          "Transfer-encoding": "Chunked",
          "Connection": "Keep-Alive"
        ])

        stream.send(res.description.data) // Write Head
        stream.send(chunk: "aaaa".data) // Write body
        stream.end() // Write end
    } catch {
        print(error)
    }
}

try! server.bind(host: "127.0.0.1", port: 3000)
try! server.listen()

Keep-Alive

Skelton supports Keep-Alive connection. Default Keep-Alive Timeout sec is 75. 0 is disable keep-alive.
You can change keep alive timeout sec to assign unsigned numner to server.keepAliveTimout member variable.

server.keepAliveTimout = 120 // 2 min

Nodelay(Nagle’s algorithm.)

let server = HTTPServer(...)

server.setNoDelay = true // Enable to use Nagle’s algorithm.

server.listen()

HTTP Status

let response = Response(status: .created)

Working With Cluster

See the Examples/HTTPServerCluster.swift

More!

Skelton adpots open-swift

For more detail, plz visit Docs for open-swift

Package.swift

import PackageDescription

let package = Package(
    name: "MyApp",
    dependencies: [
        .Package(url: "https://github.com/noppoMan/Skelton.git", majorVersion: 0, minor: 7),
    ]
 )

License

Skelton is released under the MIT license. See LICENSE for details.