Http连接管理

长连接与短连接

Http基于TCP连接,连接方式有长连接和短连接。

短连接指建立TCP连接后只进行一次数据的请求和应答,就关闭TCP连接。后续即使有这两点之间的数据请求,也只能建立新的TCP连接。

使用长连接时,一次TCP连接可持续一段时间(可由web服务器设定),在这期间一切数据交换都可在当前TCP连接上进行,无需重新建立。

对比

TCP连接需要经过三次握手四次挥手,因此TCP连接的建立和关闭都很耗时。同样TCP连接的保持会占用服务器很多资源。

因此,在有密集数据交换的场景下,短连接耗时严重,长连接可以有效提高TCP连接的利用率。

在数据交换稀疏的场景下,长连接需在服务端保持TCP连接,占用服务器资源。

连接控制字段

默认连接方式为长连接,可用首部字段Connection切换。

Connection:keep-alive表示启用长连接,Connection:close表示启用短连接。

请求报文中表明启用短连接时,服务器会将短连接字段添加到响应报文中,默认情况下会携带Connection:keep-alive字段。

队头阻塞

服务器接收到Http请求后需要在服务端进行相关处理。而有多个请求时,队列中的请求会按次序处理。那么问题来了,如果前面的请求处理特别耗时,就会阻塞后续请求处理。

解决方案

并发连接

浏览器可对一个域名同时建立多个长连接,提供多通道处理。

建立多个长连接会对服务器产生特别大的负荷,通常限制浏览器对一域名最多有6个长连接。

域名分片

上述方案,对同一域名还是限制了6个长连接。如何可以得到更高性能,也就是如何建立更多的TCP连接,那就是域名分片。

域名分片指根据域名,创建它的子分片域名,域名指向同一服务器。如此就跳过了6个长连接数量的限制。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。