HTTP协议中的长连接,读完之后,大部分程序员收藏了...( 五 )

并非keep-alive的timeout设置时间越长 , 就越能提升性能 。 长久不关闭会造成过多的僵尸连接和泄露连接出现 。

那么okttp在客户端是如果类似于客户端做到的keep-alive的机制 。

长连接的过期时间

上图中的Keep-Alive: timeout=20 , 表示这个TCP通道可以保持20秒 。 另外还可能有max=XXX , 表示这个长连接最多接收XXX次请求就断开 。 对于客户端来说 , 如果服务器没有告诉客户端超时时间也没关系 , 服务端可能主动发起四次握手断开TCP连接 , 客户端能够知道该TCP连接已经无效;另外TCP还有心跳包来检测当前连接是否还活着 , 方法很多 , 避免浪费资源 。

长连接的数据传送完成识别

使用长连接之后 , 客户端、服务端怎么知道本次传输结束呢?两部分:1是判断传输数据是否达到了Content-Length指示的大小;2动态生成的文件没有Content-Length , 它是分块传输(chunked) , 这时候就要根据chunked编码来判断 , chunked编码的数据在最后有一个空chunked块 , 表明本次传输数据结束 。 更细节的介绍可以看这篇文章 。

推荐阅读