首先了解一下HTTP协议的发展历程
1.是第一个版本的HTTP协议,它具有HTTP协议典型的无状态的特点,即每个请求独立进行处理,响应结束时就释放这个连接。
2.开始支持长连接(但默认还是使用短连接)。如果使用长连接,需要添加请求头Connection:keep-alive。
3.起,浏览器和服务器默认开启Keep-Alive。客户端和服务器都能选择随时关闭连接,则请求头中为Connection:close。
1.短连接
在HTTP 0.9和HTTP 1.0中默认使用短连接。也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。
当客户端浏览器访问的某个HTML或其他类型的Web页中包含有其他的Web资源(如JavaScript文件、图像文件、CSS文件等),每遇到这样一个Web资源,浏览器就会重新建立一个HTTP会话。
2.长连接
而使用长连接后,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。
Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接需要客户端和服务端都支持长连接。
WebSocket
再来认识一下WebSocket,和HTTP一样也是一种网络通信协议。那么为什么有了HTTP还需要WebSocket ?
,服务器不能主动向客户端推送消息。
WebSocket握手阶段基于HTTP请求过程只不过多了以下两个东西:
Upgrade: websocket Connection: Upgrade这是告诉服务器需要升级为WebSocket协议。
3.WebSocket的长连接
当建立起WebSocket的长连接,双方都可以互相发送信息,服务端可以主动发起信息。
通常所说的HTTP长连接和短连接不够严谨,毕竟HTTP是应用层的协议,真正来说应该是TCP的长连接和短接,因为TCP才是传输层的协议。
建立TCP的长连接后,在一次 TCP 连接中可以完成多个 HTTP 请求,但是对每个请求仍然要单独发请求头。而WebSocket的长连接,只需要经过一次HTTP请求,就可以做到源源不断的信息传送了。所以为了区分两者,可以把TCP的连接称为持久连接,WebSocket的长连接才是真正的长连接。
什么时候使用短连接、长连接、WebSocket长连接呢?
短连接:
Web网站的HTTP服务一般都用短链接。因为长连接对于服务端来说会耗费一定的资源,而像Web网站这么频繁的成千上万甚至上亿客户端的连接用短连接会更省一些资源,如果用长连接,而且同时有成千上万的用户,如果每个用户都占用一个连接的话,那可想而知吧。所以并发量大,但每个用户无需频繁操作情况下需用短连接好。
长连接:
数据库的连接用长连接。长连接多用于操作频繁,点对点的通讯,而且连接数不能太多情况。每个TCP连接都需要三次握手,这需要时间,如果每个操作都是先连接,再操作的话那么处理速度会降低很多,所以每个操作完后都不断开,下次处理时直接发送数据包就OK了,不用建立TCP连接。
WebSocket长连接:
社交聊天、弹幕、多玩家游戏、协同编辑、股票基金实时报价、体育实况更新、视频会议/聊天、基于位置的应用、在线教育、智能家居等需要高实时的场景。即使客户端没有主动请求消息,服务器也可以向客户端推送消息。