极限NSURLConnection的数据率是多少? (带宽限制)(Limit NSURLConn

2019-07-03 17:01发布

有没有办法来限制一个NSURLConnection的使用的带宽,或者我被迫使用CFNetwork的方法呢?

Answer 1:

是的,但它不是漂亮(它的工作原理,根据这个邮件列表后 ):

  • 在后台线程启动NSURLConnection的(你必须建立一个运行循环)。
  • 睡在-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的版本,我猜你已经读过这篇文章的可可与爱情 。



文章来源: Limit NSURLConnection data rate? (Bandwidth throttling)