AFHTTPSessionManager的创建方式对网络连接的影响

我们都知道:

  • 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
喜欢就支持一下吧
点赞0 分享