hummingbird-websocket

1.2.0

Websocket upgrade support for Hummingbird
hummingbird-project/hummingbird-websocket

What's New

v1.2.0

2023-10-13T18:07:01Z

Minor release changes

  • Add support for WebSocket extensions and implement permessage-deflate extension as described in https://www.rfc-editor.org/rfc/rfc7692. PR #27
  • Make HBWebSocket conform to Sendable. Split auto ping code off into a separate internally managed type. PR #30
  • Minimum supported version of Swift is now 5.7

Hummingbird Websocket

Adds support for upgrading HTTP1 connections to WebSocket.

Usage

Setup WebSocket upgrades with a closure that either returns .upgrade with response headers and the handler for the WebSocket or a .dontUpgrade

let app = Application(
    router: router,
    server: .http1WebSocketUpgrade { request, channel, logger in
        // upgrade if request URI is "/ws"
        guard request.uri == "/ws" else { return .dontUpgrade }
        // The upgrade response includes the headers to include in the response and 
        // the WebSocket handler
        return .upgrade([:]) { inbound, outbound, context in
            for try await packet in inbound {
                // send "Received" for every packet we receive
                try await outbound.write(.text("Received"))
            }
        }
    }
)
app.runService()

Or alternatively use a Router. Using a router means you can add middleware to process the initial upgrade request before it is handled eg for authenticating the request.

let wsRouter = Router(context: BasicWebSocketRequestContext.self)
wsRouter.middlewares.add(BasicAuthenticator())
// An upgrade only occurs if a WebSocket path is matched
wsRouter.ws("/ws") { request, context in
    // allow upgrade
    .upgrade()
} onUpgrade: { inbound, outbound, context in
    for try await packet in inbound {
        // send "Received" for every packet we receive
        try await outbound.write(.text("Received"))
    }
}
let app = Application(
    router: router,
    server: .http1WebSocketUpgrade(webSocketRouter: wsRouter)
)
app.runService()

Documentation

You can find documentation for HummingbirdWebSocket here. The hummingbird-examples repository has a number of examples of different uses of the library.

Description

  • Swift Tools 5.10.0
View More Packages from this Author

Dependencies

Last updated: Sat Jun 15 2024 12:02:27 GMT-0900 (Hawaii-Aleutian Daylight Time)