AFNetworking + CocoaSPDY 发送请求,没有得到响应

Posted

技术标签:

【中文标题】AFNetworking + CocoaSPDY 发送请求,没有得到响应【英文标题】:AFNetworking + CocoaSPDY sending requests, not getting response 【发布时间】:2014-01-12 03:42:29 【问题描述】:

我正在尝试通过 AFNetworking 设置 SPDY,但我不知道为什么会超时。

我已经在SPDY check 检查了我的服务器,一切正常。

我把这行代码放在我的initWithBaseURL:(NSURL *)url方法中

NSString *origin = [NSString stringWithFormat:@"%@:443",kAPIClientBaseURLString];
[SPDYURLConnectionProtocol registerOrigin:origin];

我收到的调试日志看起来还不错

2013-12-23 15:26:37.889 Proj[42859:70b] SPDY [INFO] register origin: <SPDYOrigin: 0x19156fa0>
2013-12-23 15:26:37.890 Proj[42859:420f] SPDY [DEBUG] origin registered: <SPDYOrigin: 0x19156fa0>
2013-12-23 15:26:37.892 Proj[42859:441b] SPDY [INFO] start loading https://api.proj.mx:443/2/ursers/launching_info?param1=1&param2=2

然后等待几秒钟后,我得到了

2013-12-23 15:28:07.994 Proj[42859:441b] SPDY [INFO] stop loading https://api.proj.mx:443/2/dr/drs?param1=1
2013-12-23 15:28:07.996 Proj[42859:441b] SPDY [WARNING] session connection error: Error Domain=SPDYSocketErrorDomain Code=6 "Unexpected end of stream." UserInfo=0x13e52710 NSLocalizedDescription=Unexpected end of stream.

如果我打印错误,它会显示为超时。

如果我删除 SPDY 集成(我在上面写的 2 行),一切都会正常进行。

我真的不知道发生了什么,不胜感激任何帮助和 cmets。

谢谢。

我更改了网址以避免隐私和安全问题。

【问题讨论】:

有什么好消息吗? 【参考方案1】:

CocoaSPDY 库需要一个服务器,该服务器要么通过专用端口使用 SPDY,要么能够在通过新建立的连接接收到 SETTINGS 帧时动态切换到 SPDY 管道。

据我所知,GFE 目前并没有做任何这些事情,这意味着遗憾的是,目前 Google API 端点不支持 CocoaSPDY 库。

您控制自己的服务器吗?如果是这样,很可能默认情况下它依赖 NPN 来建立协议,而您需要将其配置为在您的应用程序连接到它时简单地说 SPDY。

【讨论】:

嘿 Mike,我检查了 here 和 here 所以我认为它实际上支持 SPDY。我认为问题出在框架内部,或者我做错了什么,但我不知道是什么。感谢您的宝贵时间 嗨@RoHiguera - 如果不了解您尝试连接的服务器的更多信息,我无法确定,但我的第一个猜测仍然是 NPN 被用于协商协议。这是服务器在建立 TLS 连接时自动用来决定浏览器是否支持 SPDY 的当前标准机制。 CocoaSPDY 库跳过了这一步(因为 Apple 的 Secure Transport 目前不支持 NPN),并开始通过网络发送 SPDY。您需要使用配置为支持该功能的服务器。【参考方案2】:

您的服务器是否支持 SPDY?

尝试在socket:willDisconnectWithError: 委托方法中设置断点。您可以检查[socket unreadData] 以查看任何未读数据。

如果这没有为您提供任何有用的信息,请尝试实施(并记录)the other delegate methods。

【讨论】:

我会尝试那些委托方法,让你知道它是怎么回事。谢谢!

以上是关于AFNetworking + CocoaSPDY 发送请求,没有得到响应的主要内容,如果未能解决你的问题,请参考以下文章

ios基础篇(三十)—— AFNetworking的使用

iOS开发网络数据之AFNetworking使用

如何在旧的 AFNetworking 中使用 AFNetworking 2.0+?

无法识别的选择器发送到 UIButton+AFNetworking.h 的实例(UIImageView+AFNetworking 也是)

AFNetworking 3.0迁移指南

AFNetworking 3.0迁移指南