短连接

短连接:HTTP1.0中默认使用短连接。也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。HTTP的生命周期通过Request来界定,也就是说一个Request、一个Response,那么在HTTP1.0中,这次HTTP请求就结束了。

  • 轮询: 客户端一定频率的不停请求服务端是否有新的消息
  • 长轮询 :客户端发出一次请求后,服务器挂起这个请求,等有新的消息或者超时后返回

以上都属于短连接的情况。

长连接

客户端发起一次请求,服务器保持住之间用于传输http数据的tcp连接,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接,在这样一个http连接中,可以发送多个Request,接收多个Response。但是Request和Response永远是相对应的,也就是说一个request只能有一个response。并且这个response也是被动的,不能主动发起。

类型:

  • keep-alive
    http1.1 出了新头,如果请求头中包含 keep-alive,那么这个 http 请求发送收到返回之后,底层的 tcp 连接不会立马断掉,如果后续有 http 请求还是会利用。但是这个连接保持一来是没有硬性规定时间的,由浏览器和服务端实现来控制。二来这个连接不断是指底层 tcp 连接,不是说一次 http 请求收到返回之后不会断掉,还能再收服务端的返回(如果服务端对这次 http 请求立马返回,那么这次 http 请求就结束了。http 请求和底层 tcp 连接的关系后面再说)。这种不是应用层面的长连接,其实和模拟 WebSocket 没啥关系。

  • comet
    这种技术是一种 hack 技术,即浏览器发送一个 http 请求,但是服务端不是立马返回,服务端一直不返回直到有浏览器需要的内容了在返回。期间这个 http 请求可以连着维持比较长的时间(在服务端返回之前)。这样模拟一种服务端推送机制。因为浏览器请求的时候等于先把连接建立好,等服务端有消息需要返回时再返回给浏览器。

Websocket

Websocket是基于HTTP协议的一个新的协议,是HTTP协议上的一种补充,但是不等于http协议的长连接.
Websocket借用了HTTP的协议来完成一部分握手,解决的http的几项难题:

  • 被动性:当服务器完成协议升级后(即由 HTTP 升级为 Websocket),服务端就可以主动推送信息给客户端;只需要经过一次HTTP请求,就可以做到源源不断的信息传送。

  • 服务器端的资源消耗:long poll 和 ajax轮询 对服务器资源有很大的消耗:ajax轮询需要服务器有很快的资源处理速度;long poll 采用阻塞模型,需要有很高的并发,占用服务器资源空间。而Websocket建立后,可以直接建立持久连接,有信息的时候由服务端主动进行信息传送。

  • 处理速度慢:HTTP协议是无状态的,每建立一次http协议,就要重新发送鉴别信息告诉服务器你是谁,因此会消耗多余无用的传输和处理的时间;Websocket只需要一次HTTP握手,就可以保持通讯状态,直到关闭请求。解决了反复解析HTTP协议,查看identity info的问题。