因此,我目前有一个正在播放的swift应用程序,它每30秒向服务器请求一次,似乎使服务器超载。
因为我们从iTunes API请求当前正在播放的歌曲的数据,所以我在想,如果iTunes API找到结果,我可能会限制请求。
使用trackTimeMillis,我可以将该trackTimeMillis添加到当前时间,如果不大于该时间,则不对服务器执行ping操作。如果大于最新曲目的ping服务器。
我在想,我需要将ping服务器的函数包装在
Calendar.current.dateComponents([.hour], from: Date(), to: Date()), diff > Date())+ trackTimeMillis {但这是行不通的
基本上,我需要在当前日期()中添加日期,如果用户的当前时间戳( trackTimeMillis )大于Date() + trackTimeMillis,则允许请求。
发布于 2021-05-29 18:40:02
我真的不明白你想用你在问题中放的代码片段做什么。
关注如何将一些毫秒数添加到Date()中
Date的函数是addingTimeInterval(_:)
如果您需要添加特定的毫秒数来做日期,请使用以下命令:
newDate = Date().addingTimeInterval( Double(millis) / 1000)编辑:
正如Matt所指出的,您可以更简单地通过编写
newDate = Date() + Double(millis) / 1000因为有一个+操作符的覆盖,它接受一个Date和一个Double并返回一个Date。
这两个版本都向日期添加了一个包含指定秒数的Double。由于Double可以表示非常小的数字,也可以表示非常大的数字,因此您可以对任何Date进行从一秒的极小部分到几千年的范围内的加减值。
发布于 2021-05-30 01:46:36
一种更简单的替代方案。当我执行这样的任务时,我通常会存储前一个请求的Date,例如:
let lastRequestTime = Date()然后只需检查已用时间:
if Date().timeIntervalSince(lastRequestTime) > 30 {
...
}另一种选择是使用Timer。基本上,您可以安排一个在X秒后发送请求的Timer。如果您首先收到来自不同来源的响应,则只需取消Timer,如果请求已在运行,还可能取消该请求。
https://stackoverflow.com/questions/67748862
复制相似问题