我正在使用ASIHTTPRequest
在队列中发送100多个待处理请求,但服务器有一个限制,即单个IP在一分钟内无法发送超过5个请求。如何使用ASIHTTPRequest
和ASINetworkQueue
来确保这一点?想法?
提前谢谢。
启
答案 0 :(得分:1)
你可以做的是建立你的请求并将它们存储在AVMutableArray中,而不是有一个计时器,如果你的任何请求中每15秒(15 * 5 = 60)检查一次。例如,在您的h文件中,您可以使用
@property (nonatomic, retain) NSTimer *queueTimer;
@property (nonatomic, retain) NSMutableArray *requestsQueue;
- (void)sendRequest;
在你的m文件中,你应该写下这个:
@@synthesize queueTimer = _queueTimer;
@@synthesize requestsQueue = _requestsQueue;
- (void)viewDidLoad:
{
self.requestsQueue = [NSMutableArray array];
self.queueTimer = [NSTimer timerWithTimeInterval:15 target:self selector:@selector(sendRequest) userInfo:nil repeats:YES];
}
无论何时创建请求而不是将它们发送到服务器,都要将它们放在此数组中
[self.requestsQueue addObject:request];
这是sendRequest
方法:
- (void)sendRequest
{
if ([self.requestsQueue count]) {
id request = [self.requestsQueue objectAtIndex:0];
// dispatch your request
[self.requestsQueue removeObject:request];
}
}
另外,请不要忘记在你的dealloc方法中使计时器无效
[queueTimer invalidate];
希望这会有所帮助。如果出现问题,请告诉我。
答案 1 :(得分:0)
我不认为ASINetowrkQueue的NSOperationQueue让你直接这样做,所以你有两个选择:
解决方案2)可能更容易做,因为您不必深入研究ASI代码,但1)绝对更清晰,您可以与其他我认为会发现它有用的人共享代码。