美文网首页
NSURLSession之使用Keep-Alive长连接

NSURLSession之使用Keep-Alive长连接

作者: tom__zhu | 来源:发表于2021-04-19 15:13 被阅读0次

    HTTP Keep-Alive


    HTTPKeep-Alive,是HTTP 1.1默认的功能(HTTP 1.0可以在请求头中设置Keep-Alive来显式开启),其表示持久连接,以前我们所使用的HTTP请求,当发出请求并接收完响应后,将关闭TCP连接,所以,如果我们短时间内进行大量的HTTP请求的话,会导致过多的TCP连接建立、关闭消耗.

    HTTP Keep-Alive vs TCP KeepAlive


    注意,我们目前说的都是HTTPKeep-Alive,其实,TCP也有KeepAlive的概念,它解决的主要问题是,当连接建立后,如果没有数据传输,或者隔一段时间才发送一次数据时,如何来确定Client是否在线,连接是否需要保持,TCP解决方法为,当超过一段时间后,TCP会自动发送一个数据为空的报文给Client,如果对方回应了,则连接继续保持,否则,在重试多次无果后将关闭连接。

    Pipeline


    HTTP 1.1引入了Pipeline,其基于Keep-Alive,既利用一个连接做多次请求,当Client提交多个请求时,不需要等第一个请求的响应接收完就能发起第二个请求,既实现类似于流水作业的功能。目前主流服务器都支持Keep-AlivePipeline

    使用NSURLSession开启Keep-Alive、Pipeline


    • 开启NSURLSession配置NSURLSessionConfigurationHTTPShouldUsePipelining属性为YES

    • 开启NSMutableURLRequestHTTPShouldUsePipeliningYES。(NSMutableURLRequest可以继承NSURLSessionConfiguration的配置,所以如果NSURLSession配置了,则每个请求就不再需要单独配置可。)

    • 确保发出的请求在同一个NSURLSession中,因为每一个NSURLSession使用单独的连接池,所以如果NSURLSession不同,那么就无法利用Keep-AlivePipeline了。

    • 如果请求开启了认证,则相同的认证才能利用Keep-AlivePipeline


    • 使用SDWebImage库的类别UIImageView+WebCache加载图片时,默认使用的共享的NSURLSession,且开启了HTTPShouldUsePipelining

    • 使用AFNetworking库时,每个AFHTTPSessionManager都会创建一个单独的NSURLSession

    相关文章

      网友评论

          本文标题:NSURLSession之使用Keep-Alive长连接

          本文链接:https://www.haomeiwen.com/subject/pybilltx.html