Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/swift/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift 从Vapor 3中的作业访问服务_Swift_Client Server_Vapor_Server Side Swift - Fatal编程技术网

Swift 从Vapor 3中的作业访问服务

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的实现者来创建/访问服务,但似乎没有任何类型的全局容器可以使用 我是否应该尝试创建自己的请求来访

我是Vapor和服务器端swift的新手,有iOS开发背景(6年开发应用程序)。我正在尝试为设备管理构建一个简单的API,其中包括一个“作业”(计时器,无论你想叫它什么),它每小时左右检查一次设备的最后一次“签入”

为了做到这一点,我已经设置了Jobs软件包,但是我正在努力解决如何访问服务(),以访问Firebase实时数据库,获取有关设备上次登录时间的信息。根据文档,您似乎需要一个
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)