嗨,我正在通过 Firebase SDK 控制巢恒温器。我们有太多请求异常的大问题。我看到了一些关于该问题的线程,但没有解决该问题。所以我想问是否有人设法解决了这个问题?
问问题
3020 次
3 回答
1
来自https://developer.nest.com/documentation/data-rate-limits:
为避免错误,我们建议您将请求限制为每分钟最多一次调用。
由此,以及 SO 上的其他帖子,我相信您可以在任何 60 分钟窗口内发出 60 个请求。但我认为这是每个访问令牌的限制。Nest 分别说他们限制对设备和结构的写入 - 我没有达到写入限制,但我没有对设备进行大量写入。
于 2014-10-10T08:13:58.600 回答
1
为了解决这个限制,我做了以下事情:
- 当用户发出命令时,不要立即将命令发送到 Firebase;只需将其排队并在恒定延迟后执行它,D
- 如果用户在延迟 D 内发出另一个命令,则将前一个命令排入队列并将最近的命令排入队列。
使用这种策略,发出命令的数量最多为每 D 秒一个。
这是代码:
-(void) delayedSetValue:(NSArray *)valuesAndURL {
NSDictionary *values = valuesAndURL[0];
NSString *URL = valuesAndURL[1];
if ([self.subscribedURLs objectForKey:URL]) {
[[self.fireBi objectForKey:URL] runTransactionBlock:^FTransactionResult *(FMutableData *currentData) {
[currentData setValue:values];
return [FTransactionResult successWithValue:currentData];
} andCompletionBlock:^(NSError *error, BOOL committed, FDataSnapshot *snapshot) {
if (error) {
NSLog(@"Error: %@", error);
}
} withLocalEvents:NO];
}
}
/*
* Sets the values for the given firebase URL.
*/
- (void)setValues:(NSDictionary *)values forURL:(NSString *)URL
{
[NSObject cancelPreviousPerformRequestsWithTarget:self];
NSArray *valuesAndURL = @[values, URL];
[self performSelector:@selector(delayedSetValue:) withObject:valuesAndURL afterDelay:5.0f];
}
于 2015-05-25T21:40:00.657 回答
0
我有一个类似的问题。但只有当我认证太多时。我不得不等待一段时间才能让更改再次进行身份验证。现在我运行了一个 websocket 来获取值,这没有问题。设置值是我要做的下一步。所以为此我不知道你可以发送多少请求
于 2014-10-09T12:18:16.357 回答