带有AFNetworking的iOS版SPDY

时间:2014-03-07 02:17:58

标签: ios afnetworking-2 spdy cocoa-spdy

我正在尝试使用SPDY for iOS app,它目前使用AFNetworking(2.1.0)来处理HTTP请求。服务器端,我正在使用Google App Engine(选中SPDYCheck),它是SPDY友好的。

以下是我在代码中集成SPDY的方法。

我正在使用AFHTTPRequestOperationManager

@interface MyClient : AFHTTPRequestOperationManager

我在initWithBaseURL:

中嵌入了SPDY
- (id)initWithBaseURL:(NSURL *)url {
    self = [super initWithBaseURL:url];
    if (!self) {
        return nil;
    }

    // SPDY Config
    NSString *spdyURL = [NSString stringWithFormat:@"%@://%@:443",url.scheme, url.host];

    [SPDYURLConnectionProtocol registerOrigin:spdyURL];
    ...
  }

请注意,我的网址格式为https://myapp.appspot.com/_ah/所以我在传递给SPDY时重新格式化registerOrigin: spdyURL看起来像https://myapp.appspot.com:443

我想这就是我需要的一切?但是在添加SPDY代码后我无法发送请求。调试消息显示以下错误:

error response from api/users/v1/is_token_valid :
Error Domain=NSURLErrorDomain 
Code=-1001 
"The request timed out." 
UserInfo=0xdc2c250 {NSErrorFailingURLStringKey=https://myapp.appspot.com/_ah/api/users/v1/is_token_valid?
user_token=[a_token], 
NSErrorFailingURLKey=https://myapp.appspot.com/_ah/api/users/v1/is_token_valid?
user_token=[a_token], 
NSLocalizedDescription=The request timed out., NSUnderlyingError=0xf270e60 "The request timed out."}

我根本不知道。希望在iOS上有SPDY经验的人可以帮忙!!

3 个答案:

答案 0 :(得分:3)

Apple确实不支持默认TLS实施中的NPN。但是有一些SPDY库使用OpenSSL(支持NPN)。

这是他们之一: https://github.com/locationlabs/SPDY-for-iPhone

答案 1 :(得分:2)

不幸的是,Apple的TLS实现不支持Google App Engine使用的NPN。您可以在CocoaSPDY GitHub README

中详细了解相关信息

目前您无法将CocoaSPDY与Google App Engine一起使用。

答案 2 :(得分:0)

你可以吗? 我看到SPDY协议支持现在可以在OS X Yosemite和iOS 8上的NSURLSession中使用,并且由NSURLSession透明地支持。 详情请见:https://developer.apple.com/videos/wwdc/2014/ [基础网络的新功能] 但为什么它不起作用? 当我使用CocoaSPDY时,设置manager.session.configuration.protocolClasses = @ [[SPDYURLSessionProtocol class]];没关系;