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是否支持速率限制;也可能不难为其添加支持。 –