ASIHttpRequest的一个Bug与30秒超时
来源:互联网 发布:单片机1ms延时程序 编辑:程序博客网 时间:2024/05/17 03:18
今天在项目中发现一个ASIHttpRequest的Bug。这个Bug可能会导致你Http请求延时至少在timeout设置时间结束之后。更可怕的是,为了找出这个Bug,可能会浪费程序员更多的时间。为这个问题我至少奋斗了3个小时!
项目中一直在使用ASIHttpRequest,但有一次,我发现Http请求居然总是不成功。我下意识地以为这是网络延时问题,我延长了ASIHttpRequest的超时时间至30秒,于是程序不再报错。
但今天在使用同样的代码时,我发现以前我全错了。这不是超时的问题,而是ASIHttpRequest的一个Bug。
因为这次我请求本机的Tomcat服务器的某个jsp页面,页面代码写得很简单,在firefox中请求该页面的响应时间不会超过0.01秒,但在iPhone模拟器中居然用了20多秒才返回。这不可能是网络延时的原因。
当我把超时时间改小至10秒,等待超时时间结束,ASIHttpRequest甚至直接报kCFStreamEventErrorOccurred错误。
我打开ASIHttpRequest的所有调试日志,发现ASIHttpRequest似乎在尝试用上次的连接去连接服务器:
Request #3 will use connection #2
Request attempted to use connection #2, but it has been closed -will retry with a new connection
Request #3 will use connection #3
它好像连接时重用上次的http连接。这样肯定是不行的,因为上次的http请求结束后服务器已经把连接关闭了。
于是我们只能把ASIHttpRequest的连接重用关闭:
[requestsetShouldAttemptPersistentConnection:NO];
这样,前面的问题就不会出现了。其实,在不同的http会话中,不应该开启PersistentConnection。
- ASIHttpRequest的一个Bug与30秒超时
- ASIHttpRequest的一个Bug与30秒超时
- ASIHttpRequest的一个Bug与30秒超时
- PHPCurl的毫秒超时的一个”Bug”
- Curl的毫秒超时的一个”Bug”
- WinSock中关于阻塞接收/发送超时的一个BUG
- WinSock中关于阻塞接收/发送超时的一个BUG
- 30秒运行超时的错误(Maximum&nbsp…
- ecshop运行超过30秒超时的限制解决办法
- ASIHTTPRequest的使用—— 超时代码判断
- 调试sdk接口超时30秒
- 解决jasig CAS server端 ticketGrantingTicket超时后的一个bug
- 做一个与bug共存的程序员
- AFNetworking 与ASIHTTPRequest的比较
- AFNetworking与ASIHTTPRequest的区别
- AFNetworking与ASIHTTPRequest的区别
- 29.97帧/秒 与 30帧/秒 的区别
- 30秒运行超时的错误(Maximum execution time of 30 seconds exceeded)
- Java技术如何改变我的生活?
- Windows 私有堆 - HEAP_NO_SERIALIZE 标志
- ps 模糊工具 制造出蹦跑的效果
- opencv, image处理注意点,eigen库的应用
- Java web自定义标签按钮级别权限控制完美诠释(jplogic 快速开发平台)
- ASIHttpRequest的一个Bug与30秒超时
- iOS经验1:自己写的网络数据请求 第三方框架 断点续传 上传下载
- 安卓基础巩固
- Angular离线API文档安装指南
- ASIHttpRequest常用方法
- 获取java线程中信息的两种方法
- 解析Cloudera Manager内部结构、功能包括配置文件、目录位置等
- Drools规则工作流引擎开发视频教程
- MyEclipse6.5启动后 自动关闭 jvm terminated. exit code=1