Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/115.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 限制连接数据速率?(带宽限制)_Ios_Macos_Cocoa_Nsurlconnection_Bandwidth Throttling - Fatal编程技术网

Ios 限制连接数据速率?(带宽限制)

Ios 限制连接数据速率?(带宽限制),ios,macos,cocoa,nsurlconnection,bandwidth-throttling,Ios,Macos,Cocoa,Nsurlconnection,Bandwidth Throttling,有没有办法限制NSURLConnection使用的带宽,或者我被迫使用CFNetwork方法?是的,但它并不漂亮(它根据以下情况工作): 在后台线程上启动NSURLConnection(您必须设置一个运行循环) 睡眠时间-连接:didReceiveData: 以线程安全的方式将数据转发到主线程 如果代理是UIViewController,那么第三个要点有点棘手,但如果delegate是\uuuuu弱或\uu不安全\uu未维护: - (void)connection:(NSURLConnect

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

是的,但它并不漂亮(它根据以下情况工作):

  • 在后台线程上启动NSURLConnection(您必须设置一个运行循环)
  • 睡眠时间
    -连接:didReceiveData:
  • 以线程安全的方式将数据转发到主线程
如果代理是
UIViewController
,那么第三个要点有点棘手,但如果
delegate
\uuuuu弱
\uu不安全\uu未维护
:

- (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:waituntldone:


对于CFNetwork版本,我猜您已经读过了。

哇,谢谢您给出了令人惊讶的答案!正如你所说,它并不漂亮,但我会尝试看看它是否工作可靠,如果不可靠,我将坚持使用CFNetwork。再次感谢你@tc NSURLConnection方法并没有真正限制下载速率,相反,它会降低本地缓冲区中数据的存储速度!我们无法限制传递给
-connection:didReceiveData:
方法的数据。我们是否可以限制从套接字读取的数据,该数据以某种方式传递到
-connection:didReceiveData:
?@bikram990我希望它能够在同一线程中执行
read()
-connection:didReceiveData:
。如果没有,那么我会看看AsittpRequest或AFNetworking是否支持速率限制;添加对它的支持可能也不难。@tc ASIHttpRequest可以限制速率,因为它直接使用
CFNetwork
,但AFNetworking不能,因为它使用
NSURLConnection
。我查看了AFNetworking的来源,似乎它可以限制上传速率,但在他们的示例中我找不到一个公共接口。@tc我是objective c的初学者。可能我错过了一些东西,但是AFAIK
NSURLConnection
无法限制下载速率。