Swift 从Vapor 3中的作业访问服务
我是Vapor和服务器端swift的新手,有iOS开发背景(6年开发应用程序)。我正在尝试为设备管理构建一个简单的API,其中包括一个“作业”(计时器,无论你想叫它什么),它每小时左右检查一次设备的最后一次“签入” 为了做到这一点,我已经设置了Jobs软件包,但是我正在努力解决如何访问服务(),以访问Firebase实时数据库,获取有关设备上次登录时间的信息。根据文档,您似乎需要一个Swift 从Vapor 3中的作业访问服务,swift,client-server,vapor,server-side-swift,Swift,Client Server,Vapor,Server Side Swift,我是Vapor和服务器端swift的新手,有iOS开发背景(6年开发应用程序)。我正在尝试为设备管理构建一个简单的API,其中包括一个“作业”(计时器,无论你想叫它什么),它每小时左右检查一次设备的最后一次“签入” 为了做到这一点,我已经设置了Jobs软件包,但是我正在努力解决如何访问服务(),以访问Firebase实时数据库,获取有关设备上次登录时间的信息。根据文档,您似乎需要一个Container的实现者来创建/访问服务,但似乎没有任何类型的全局容器可以使用 我是否应该尝试创建自己的请求来访
Container
的实现者来创建/访问服务
,但似乎没有任何类型的全局容器可以使用
我是否应该尝试创建自己的请求
来访问Ferno
服务?或者有没有办法访问全局应用程序
下面是我到目前为止所做的,但我现在所做的似乎大错特错!一定有办法做到这一点吗
Jobs.add(interval: (60*30).seconds) { [weak devicesController] in
devicesController?.checkForNotSeenDevices()
}
我也和费诺斗争过 在boot.swift内部,使用全局应用程序作为ferno客户端和请求的容器
let client = try! app.make(FernoClient.self)
let request = Request(using: app)
现在,您的客户端已准备好执行数据库操作,例如post操作。每次使用您自己的作业都可以重复该操作
let inputData = try! client.ferno.overwrite(req: request, appendedPath: ["users/john"], body: yourOwnContentModel)
要执行计划任务,最好在
EventLoop
上使用scheduledrepeatedtask
。例如,您可以在您的引导内调用此选项。swift
:
app.eventLoop.scheduleRepeatedTask(初始延迟:。秒(0),延迟:。分钟(30)){in
let client=try app.make(FernoClient.self)
让请求=请求(使用:app)
client.ferno.retrieve(请求:请求,查询项:[],附加路径:[“设备”])
}
实际上,FernoClient().client.retrieve
实际上并不需要一个请求
,而是一个工作者
。不幸的是,该库显式地声明了请求
,因此您需要对此解决方法进行修改。如果我没有遗漏任何内容,您可以向Ferno
发送PR,并用Worker
替换Request
。那么你可以这样称呼它:
client.ferno.retrieve(worker:app,queryItems:[],appendedPath:[“devices”])
不幸的是,此解决方案不适用于我,因为每次调用我的作业时,它都会重新初始化应用程序,并导致计时器设置出现问题(即每次调用时,它都会添加一个新的作业
),我实际上仍然在这里使用作业
,但感谢您在引导.swift
中提供的建议!
let inputData = try! client.ferno.overwrite(req: request, appendedPath: ["users/john"], body: yourOwnContentModel)