Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/hummingbird-project/hummingbird-core
HTTP server for Hummingbird the lightweight, flexible web application framework written in Swift
https://github.com/hummingbird-project/hummingbird-core
http-server http2 server server-side-swift swift-nio tls
Last synced: 5 days ago
JSON representation
HTTP server for Hummingbird the lightweight, flexible web application framework written in Swift
- Host: GitHub
- URL: https://github.com/hummingbird-project/hummingbird-core
- Owner: hummingbird-project
- License: apache-2.0
- Created: 2021-02-01T10:59:56.000Z (almost 4 years ago)
- Default Branch: main
- Last Pushed: 2024-09-03T08:32:16.000Z (5 months ago)
- Last Synced: 2025-01-10T06:36:56.350Z (12 days ago)
- Topics: http-server, http2, server, server-side-swift, swift-nio, tls
- Language: Swift
- Homepage:
- Size: 505 KB
- Stars: 43
- Watchers: 6
- Forks: 6
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- Funding: .github/FUNDING.yml
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
README
# HummingbirdCore
Swift NIO based HTTP server. The core HTTP server component for v1.0 of the [Hummingbird](https://github.com/hummingbird-project/hummingbird) web framework.
## Usage
HummingbirdCore contains a Swift NIO based HTTP server. When starting the server you provide it with a struct that conforms to `HBHTTPResponder` to define how the server should respond to requests. For example the following is a responder that always returns a response containing the word "Hello" in the body.
```swift
struct HelloResponder: HBHTTPResponder {
func respond(to request: HBHTTPRequest, context: ChannelHandlerContext, onComplete: @escaping (Result) -> Void) {
let responseHead = HTTPResponseHead(version: .init(major: 1, minor: 1), status: .ok)
let responseBody = context.channel.allocator.buffer(string: "Hello")
let response = HBHTTPResponse(head: responseHead, body: .byteBuffer(responseBody))
onComplete(.success(response))
}
}
```The following will start up a server using the above `HelloResponder`.
```swift
let eventLoopGroup = MultiThreadedEventLoopGroup(numberOfThreads: System.coreCount)
let server = HBHTTPServer(
group: eventLoopGroup,
configuration: .init(address: .hostname("127.0.0.1", port: 8080))
)
try server.start(responder: HelloResponder()).wait()
// Wait until server closes which never happens as server channel is never closed
try server.wait()
```## Swift service lifecycle
If you are using HummingbirdCore outside of Hummingbird ideally you would use it along with the swift-server library [swift-service-lifecycle](https://github.com/swift-server/swift-service-lifecycle). This gives you a framework for clean initialization and shutdown of your server. The following sets up a Lifecycle that initializes the HTTP server and stops it when the application shuts down.
```swift
import Lifecycle
import LifecycleNIOCompatlet lifecycle = ServiceLifecycle()
lifecycle.register(
label: "HTTP Server",
start: .eventLoopFuture { self.server.start(responder: MyResponder()) },
shutdown: .eventLoopFuture(self.server.stop)
)
lifecycle.start { error in
if let error = error {
print("ERROR: \(error)")
}
}
lifecycle.wait()
```## HummingbirdCore Extensions
The HummingbirdCore can be extended to support TLS and HTTP2 via the HummingbirdTLS and HummingbirdHTTP2 libraries. The following will add TLS support
```swift
import HummingbirdTLS
server.addTLS(tlsConfiguration: myTLSConfiguration)
```
and this will add an HTTP2 upgrade option
```swift
import HummingbirdHTTP2
server.addHTTP2Upgrade(tlsConfiguration: myTLSConfiguration)
```
As the HTTP2 upgrade requires a TLS connection this is added automatically when enabling HTTP2 upgrade. So don't call both function as this will setup two TLS handlers.## Documentation
Reference documentation for both HummingbirdCore and Hummingbird can be found [here](https://hummingbird-project.github.io/hummingbird-docs/1.0/documentation/hummingbirdcore)