2
有沒有辦法限制NSURLConnection使用的帶寬,或者我被迫使用CFNetwork方法?限制NSURLConnection數據速率? (帶寬限制)
有沒有辦法限制NSURLConnection使用的帶寬,或者我被迫使用CFNetwork方法?限制NSURLConnection數據速率? (帶寬限制)
是的,但它不是漂亮(被this mailing list post作品):
-connection:didReceiveData:
。第三bulletpoint是有點棘手得到的權利,如果該委託是UIViewController
,而應工作提供了這樣的事情delegate
是__weak
或__unsafe_unretained
:
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
[NSThread sleepForTimeInterval:...];
[self performSelectorOnMainThread:@selector(notifyDelegateDidReceiveData:) withObject:data waitUntilDone:NO];
}
-(void)notifyDelegateDidReceiveData:(NSData*)data
{
assert([NSThread isMainThread]);
[delegate myConnectionWrapper:self didReceiveData:data];
}
計算多久的是睡覺不重要,因爲你可能希望考慮TCP/IP開銷,但[data length]+100
可能是正確的。
如果您有多個連接並且想要限制組合帶寬,請將它們全部放在相同的後臺線程/運行循環中(請參閱-performSelector:onThread:withObject:waitUntilDone:
)。
對於CFNetwork版本,我猜你已閱讀this post on Cocoa with Love。
哇,謝謝你的驚人答案!正如你所說的那樣,這不太好,但我會試着看看它是否可靠工作,如果不是,我會堅持使用CFNetwork。再次感謝你! –
@tc NSURLConnection方法並沒有真正限制下載速度,而是會降低數據在本地緩衝區的存儲速度!我們不能限制傳遞給'-connection:didReceiveData:'方法的數據。我們是否可以限制從socket讀取的數據,該數據以某種方式傳遞給'-connection:didReceiveData:'? – bikram990
@ bikram990我希望它能在同一個線程中執行read()和'-connection:didReceiveData:'。如果沒有,那麼我會看看ASIHttpRequest或AFNetworking是否支持速率限制;也可能不難爲其添加支持。 –