Git Product home page Git Product logo

czechboy0 / swift-service-lifecycle Goto Github PK

View Code? Open in Web Editor NEW

This project forked from swift-server/swift-service-lifecycle

0.0 1.0 0.0 353 KB

Cleanly startup and shutdown server application, freeing resources in order before exiting.

Home Page: https://swiftpackageindex.com/swift-server/swift-service-lifecycle/documentation/servicelifecycle

License: Apache License 2.0

Shell 4.75% Swift 94.72% Dockerfile 0.53%

swift-service-lifecycle's Introduction

Swift Service Lifecycle

Swift Service Lifecycle provides a basic mechanism to cleanly start up and shut down the application, freeing resources in order before exiting. It also provides a Signal-based shutdown hook, to shut down on signals like TERM or INT.

Swift Service Lifecycle was designed with the idea that every application has some startup and shutdown workflow-like-logic which is often sensitive to failure and hard to get right. The library codes this common need in a safe and reusable way that is non-framework specific, and designed to be integrated with any server framework or directly in an application. Furthermore, it integrates natively with Structured Concurrency.

This is the beginning of a community-driven open-source project actively seeking contributions, be it code, documentation, or ideas. What Swift Service Lifecycle provides today is covered in the API docs, but it will continue to evolve with community input.

Getting started

If you have a server-side Swift application or a cross-platform (e.g. Linux, macOS) application, and you would like to manage its startup and shutdown lifecycle, Swift Service Lifecycle is a great idea. Below you will find all you need to know to get started.

Adding the dependency

To add a dependency on the package, declare it in your Package.swift:

.package(url: "https://github.com/swift-server/swift-service-lifecycle.git", from: "2.0.0-alpha.1"),

and to your application target, add ServiceLifecycle to your dependencies:

.target(name: "MyApplication", dependencies: [.product(name: "ServiceLifecycle", package: "swift-service-lifecycle")]),

Using ServiceLifecycle

Below is a short usage example however you can find detailed documentation on how to use ServiceLifecycle over here.

ServiceLifecycle consists of two main building blocks. First, the Service protocol and secondly the ServiceGroup. As a library or application developer you should model your long-running work as services that implement the Service protocol. The protocol only requires a single func run() async throws method to be implemented. Afterwards, in your application you can use the ServiceGroup to orchestrate multiple services. The group will spawn a child task for each service and call the respective run method in the child task. Furthermore, the group will setup signal listeners for the configured signals and trigger a graceful shutdown on each service.

actor FooService: Service {
    func run() async throws {
        print("FooService starting")
        try await Task.sleep(for: .seconds(10))
        print("FooService done")
    }
}

@main
struct Application {
    static func main() async throws {
        let service1 = FooService()
        let service2 = FooService()
        
        let serviceGroup = ServiceGroup(
            services: [service1, service2],
            configuration: .init(gracefulShutdownSignals: [.sigterm]),
            logger: logger
        )
        try await serviceGroup.run()
    }
}

Security

Please see SECURITY.md for details on the security process.

swift-service-lifecycle's People

Contributors

tomerd avatar franzbusch avatar yim-lee avatar sajjon avatar fabianfett avatar hassila avatar ktoso avatar florianreinhart avatar weissi avatar t089 avatar stevapple avatar adam-fowler avatar buratti avatar darrellroot avatar mahdibm avatar slashmo avatar sliemeobn avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.