【问题标题】:Access a service from a Job in Vapor 3从 Vapor 3 中的作业访问服务
【发布时间】:2019-07-12 21:18:56
【问题描述】:

我对 Vapor 和服务器端 swift 非常陌生,具有 iOS 开发背景(开发应用程序 6 年)。我正在尝试为设备管理构建一个简单的 API,其中包括一个“工作”(您想调用它的计时器),它每隔一小时左右检查一次设备最后一次“签入”。

为此,我设置了 Jobs 包,但是我正在努力弄清楚如何访问服务 (Ferno) 以访问我的 Firebase 实时数据库以获取有关设备上次登录时间的信息。它似乎根据文档,您需要Container 的实现者来创建/访问Service,但似乎没有任何我可以使用的全局容器。

我是否应该尝试创建自己的Request 只是为了访问Ferno 服务?或者有什么方法可以访问全局app

以下是我到目前为止所拥有的,但我所做的似乎非常错误!肯定有办法做到这一点吗?

Jobs.add(interval: (60*30).seconds) { [weak devicesController] in
    devicesController?.checkForNotSeenDevices()
}
func checkForNotSeenDevices() throws {

    let client = try app(.detect()).make(FernoClient.self)
    client.ferno.retrieve(req: ???, queryItems: [], appendedPath: ["devices"])
}

【问题讨论】:

    标签: swift client-server vapor server-side-swift


    【解决方案1】:

    我也和费尔诺斗争过。

    在 boot.swift 中,使用全局应用作为 ferno 客户端和请求的容器。

        let client = try! app.make(FernoClient.self)
        let request = Request(using: app)
    

    现在您的客户端已准备好执行数据库操作,例如发布操作。每次都可以使用您自己的作业重复此操作。

        let inputData = try! client.ferno.overwrite(req: request, appendedPath: ["users/john"], body: yourOwnContentModel)
    

    【讨论】:

    • 不幸的是,此解决方案对我不起作用,因为每次调用我的作业时它都会重新初始化应用程序并导致我的计时器设置出现问题(即每次调用它都会添加一个新的 Job )
    【解决方案2】:

    要执行计划任务,最好在EventLoop 上使用scheduleRepeatedTask。你可以例如在你的 boot.swift 中调用它:

    app.eventLoop.scheduleRepeatedTask(initialDelay: .seconds(0), delay: .minutes(30)) { _ in
        let client = try app.make(FernoClient.self)
        let request = Request(using: app)
        client.ferno.retrieve(req: request, queryItems: [], appendedPath: ["devices"])
    }
    

    实际上FernoClient().client.retrieve 并不真正需要Request,而是Worker。不幸的是,该库明确声明Request,因此您需要使用此解决方法。如果我在这里没有遗漏任何内容,您可以向Ferno 提交公关并将Request 替换为Worker。然后你可以这样称呼它:

    client.ferno.retrieve(worker: app, queryItems: [], appendedPath: ["devices"])
    

    【讨论】:

    • 我实际上最终仍然在这里使用jobs,但感谢您在boot.swift 中使用它的建议!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-15
    • 2021-04-06
    • 1970-01-01
    • 2010-09-08
    • 2022-11-14
    • 1970-01-01
    相关资源
    最近更新 更多