我正在考虑在我们的 iOS 应用程序中启用后台获取,以便为 PubNub 提供时间以防止出现超时。
编辑 - 一些背景:我们的应用正在通过 pubnub channel 将其地理位置传达给服务。当用户在后台时,我们要求用户授权位置,当授权时,我们已经偶尔从操作系统中获得时间。我们一直在尝试使用在线功能,以便服务可以知道我们的应用程序是退出/断开连接还是刚刚停止移动。然而,当设备在后台停止移动时,我们无法从到达的位置获得执行时间,因此无论如何都会发生 pubnub 超时。
启用该后台状态后,看起来我需要
setMinimumBackgroundFetchInterval 一个间隔(当我们不想超时时也调用 Never)。application:performFetchWithCompletionHandler:但是,有些事情并不明显:
关于我们的 pubnub 超时,我应该选择什么获取间隔?似乎操作系统不一定遵守指定的提取间隔。一般来说,我们希望保持超时时间较短,以便当我们的应用程序离线或强制退出时,我们的另一端会很快检测到。这似乎与心跳不一致,并确保我们不会无意中超时。我正在考虑只使用 Minimum 间隔。
我认为我不需要在我的 performFetchWithCompletionHandler 方法中做任何事情来确保发送存在心跳,而只是因为应用程序被唤醒会让 PubNub 的计时器开火并照顾好一切。但是,我能做些什么吗?仅在心跳交易之后调用完成 block ,或者知道何时返回 newData 与 noData 与 failed。此外,我担心每次使用 noData 立即调用完成操作将被操作系统视为取消获取间隔的线索。
或者,如果有人可以推荐这种方法的替代方法来防止超时,我将不胜感激。
最佳答案
如果您想在一个(或多个) channel 上保持后台应用程序存在,您可以简单地使用 REST 调用每 4 分钟发送一次心跳(比默认超时每 5 分钟更快 - 4 看起来就像一个不错的整数):
https://ps.pndsn.com/v2/presence/sub-key/{yourSubKey}/channel/{listOfchannels}/heartbeat?&uuid={clientuuid}
例如:
https://ps.pndsn.com/v2/presence/sub-key/sub-c-1234.../channel/channel1,channel2/heartbeat?&uuid=db9c5e39-7c95-40f5-8d71 -125765b6f561
只需确保您发送的 UUID 与您在该用户的应用程序中初始化 PubNub 实例的 UUID 相同。
此心跳 ping 与长时间运行的 subscribe 连接具有相同的效果。它会将给定的 UUID 保留在您传入的 channel 上。
参见 PubNub REST Docs了解更多详情。
关于ios - PubNub 防止存在超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43725654/
有没有办法在这个简单的get方法中添加超时选项?我正在使用法拉第3.3。Faraday.get(url)四处寻找,我只能先发起连接后应用超时选项,然后应用超时选项。或者有什么简单的方法?这就是我现在正在做的:conn=Faraday.newresponse=conn.getdo|req|req.urlurlreq.options.timeout=2#2secondsend 最佳答案 试试这个:conn=Faraday.newdo|conn|conn.options.timeout=20endresponse=conn.get(url
这里有一个很好的答案解释了如何在Ruby中下载文件而不将其加载到内存中:https://stackoverflow.com/a/29743394/4852737require'open-uri'download=open('http://example.com/image.png')IO.copy_stream(download,'~/image.png')我如何验证下载文件的IO.copy_stream调用是否真的成功——这意味着下载的文件与我打算下载的文件完全相同,而不是下载一半的损坏文件?documentation说IO.copy_stream返回它复制的字节数,但是当我还没有下
我正在尝试解析一个文本文件,该文件每行包含可变数量的单词和数字,如下所示:foo4.500bar3.001.33foobar如何读取由空格而不是换行符分隔的文件?有什么方法可以设置File("file.txt").foreach方法以使用空格而不是换行符作为分隔符? 最佳答案 接受的答案将slurp文件,这可能是大文本文件的问题。更好的解决方案是IO.foreach.它是惯用的,将按字符流式传输文件:File.foreach(filename,""){|string|putsstring}包含“thisisanexample”结果的
我的模型有defself.empty_building//stuffend我怎样才能对这个现有的进行rspec?,已经尝试过:describe"empty_building"dosubject{Building.new}it{shouldrespond_to:empty_building}endbutgetting:Failure/Error:it{shouldrespond_to:empty_building}expected#torespondto:empty_building 最佳答案 你有一个类方法self.empty_bu
1.错误信息:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:requestcanceledwhilewaitingforconnection(Client.Timeoutexceededwhileawaitingheaders)或者:Errorresponsefromdaemon:Gethttps://registry-1.docker.io/v2/:net/http:TLShandshaketimeout2.报错原因:docker使用的镜像网址默认为国外,下载容易超时,需要修改成国内镜像地址(首先阿里
使用rails4,ruby2。我在rails配置中为我的cookiesession设置了30分钟的超时时间。问题是,如果我转到表单,让session超时,然后提交表单,我会收到此ActionController::InvalidAuthenticityToken错误。如何在Rails中优雅地处理这个错误?比如说,重定向到登录屏幕? 最佳答案 在您的ApplicationController:rescue_fromActionController::InvalidAuthenticityTokendoredirect_tosome_p
有几种方法:first_or_create_by、find_or_create_by等,它们的工作原理是:与数据库对话以尝试找到我们想要的东西如果我们找不到,就自己做保存到数据库显然,并发调用这些方法可能会使两个线程都找不到它们想要的东西,并且在第3步中一个线程会意外失败。似乎更好的解决方案是,创建或查找即:提前在您的数据库中创建合理的唯一性约束。如果你想保存一些东西,就保存它如果有效,那就太好了。如果它因为RecordNotUnique异常而无法工作,它已经存在,太好了,加载它那么在什么情况下我想使用Rails内置的东西而不是我自己的(看起来更可靠)create_or_find?
在Ruby中,我需要在n毫秒秒后暂停一段代码的执行。我知道RubyTimeout库支持秒的超时:http://ruby-doc.org/stdlib/libdoc/timeout/rdoc/index.html这可能吗? 最佳答案 只需为超时使用十进制值。n毫秒的示例:Timeout::timeout(n/1000.0){sleep(100)} 关于Ruby在n*milli*秒后超时一段代码,我们在StackOverflow上找到一个类似的问题: https:
print"Enteryourpassword:"pass=STDIN.noecho(&:gets)puts"Yourpasswordis#{pass}!"输出:Enteryourpassword:input.rb:2:in`':undefinedmethod`noecho'for#>(NoMethodError) 最佳答案 一开始require'io/console'后来的Ruby1.9.3 关于ruby-为什么不能使用类IO的实例方法noecho?,我们在StackOverflow上
我有一个ActiveRecord对象,我想在不对模型进行永久验证的情况下阻止它被保存。您过去可以使用errors.add执行类似的操作,但它看起来不再有效了。user=User.lastuser.errors.add:name,"namedoesn'trhymewithorange"user.valid?#=>trueuser.save#=>true或user=User.lastuser.errors.add:base,"myuniqueerror"user.valid?#=>trueuser.save#=>true如何在不修改用户对象模型的情况下防止将用户对象保存在Rails3.2中