我使用ASIHTTPRequest
在隊列中發送了100個以上的待處理請求,但服務器有一個限制,即單個IP無法在一分鐘內發送超過5個請求。我如何通過使用ASIHTTPRequest
和ASINetworkQueue
來確保這一點?思考?如何確保在一分鐘內發送少於5個請求。
預先感謝您。
啓。
我使用ASIHTTPRequest
在隊列中發送了100個以上的待處理請求,但服務器有一個限制,即單個IP無法在一分鐘內發送超過5個請求。我如何通過使用ASIHTTPRequest
和ASINetworkQueue
來確保這一點?思考?如何確保在一分鐘內發送少於5個請求。
預先感謝您。
啓。
我不認爲任何ASINetowrkQueue的NSOperationQueue讓那麼你有兩個選擇,你這樣做直接:
在解決方案2)可能更容易做到這一點,因爲您不必深入研究ASI代碼,但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];
希望這有助於。讓我知道是否出了問題。