我们都知道:
-
TCP的四元组
源IP, 目标IP, 源端口, 目标端口
-
HTTP默认端口80, HTTPS默认端口443
-
AFHTTPSessionManager继承自AFURLSessionManager, 封装了常用的HTTP方法
查看相关文档
AFN的AFHTTPSessionManager
可以看到如果NSURLSessionConfiguration是background session的话, 那么AFHTTPSessionManager就必须是全局的
销毁session的方法
manager类方法
可以看到这里不是单例模式
NSURLSession的HTTPMaximumConnectionsPerHost
对于同一个IP做请求, iOS系统的TCP最大连接数默认是4
可以修改配置
抓包测试AFHTTPSessionManager的创建方式对网络连接的影响
使用Wireshark + Charles + 真机, 过滤下IP
观察端口列, 几张图的第一行高亮均为上一次请求的结束, 然后刷新接口
AFHTTPSessionManager非单例:
可以看到客户端的端口由50847新增了50848, 紧接着TCP三次握手
这次刷新了三个接口, 可以看到客户端的端口多了50866, 50867和50868, 紧接着都是TCP三次握手
这里的连接并不是每次请求结束就FIN的, 是过一段时间FIN或RST的
AFHTTPSessionManager单例:
可以看到客户端的端口是同一个50735, 没有新增
HTTP1.1的Connection默认是keep-alive, 多个请求可以共用一个TCP连接
HTTP2实现了多路复用, 使用一个连接可以并行发送多个请求和响应, 真·全双工
如果每次请求都新建session, 新建TCP连接, 属实有些违背了HTTP1.1或HTTP2
官方文档
官方对多session的创建是期望对task的不同配置
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END