0

嗨,我正在通过 Firebase SDK 控制巢恒温器。我们有太多请求异常的大问题。我看到了一些关于该问题的线程,但没有解决该问题。所以我想问是否有人设法解决了这个问题?

4

3 回答 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 回答