Ios 限制连接数据速率?(带宽限制)
有没有办法限制NSURLConnection使用的带宽,或者我被迫使用CFNetwork方法?是的,但它并不漂亮(它根据以下情况工作):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(您必须设置一个运行循环)
- 睡眠时间
-连接: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的初学者。可能我错过了一些东西,但是AFAIKNSURLConnection
无法限制下载速率。