短连接和长连接
短连接:
- http协议底层基于socket的tcp协议,每次通信都会新建一个TCP连接,即每次请求和响应过程都经历”三次握手-四次挥手“
- 优点:方便管理
- 缺点:频繁的建立和销毁连接占用资源
长连接:
-
客户端和服务端之间只有一条TCP通信连接,以后所有的请求都使用这条连接,也称为持久连接。
-
优点:多次请求-响应基于一条连接,避免资源浪费。
-
缺点:客户端的数量增加,服务端承受的压力增大。对每个请求仍然要单独发header,Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。
总结:
- 长短连接指的是客户端和服务端建立和保持TCP连接的机制。
- 不论是短连接还是长连接,都是客户端主动向服务端发请求,才能获悉数据,服务端是无法主动给客户端推送信息的。
- 服务端主动给客户端推送消息最简单的方式是采用轮询,即客户端每隔一段时间就向服务端发出一个询问,获取服务端最新的消息。最典型的应用就是聊天室。
短轮询和长轮询
短轮询:
- 浏览器每隔一段时间向服务端发送http请求,服务器端在收到请求后,不论是否有数据更新,都直接进行响应。这种方式实现的即时通信,本质上还是浏览器发送请求,服务器接受请求的一个过程,通过让客户端不断的进行请求,使得客户端能够模拟实时地收到服务器端的数据的变化。
- 优点:比较简单,易于理解;
- 缺点:由于需要不断的建立 http 连接,严重浪费了服务器端和客户端的资源。当用户增加时,服务器端的压力就会变大,这是很不合理的。
长轮询:
-
首先由客户端向服务器发起请求,当服务器收到客户端发来的请求后,服务器端不会直接进行响应,而是先将 这个请求挂起,然后判断服务器端数据是否有更新。
如果有更新,则进行响应,如果一直没有数据,则到达一定的时间限制才返回。客户端 JavaScript 响应处理函数会在处理完服务器返回的信息后,再次发出请求,重新建立连接。
-
优点:「明显减少了很多不必要的 http 请求次数」,相比之下节约了资源。
-
缺点:实现复杂,且连接挂起也会导致资源的浪费。
总结:
- 短轮询和长轮询指的是客户端请求服务端,服务端给予响应的方式。
- 轮询的方式可以解决服务端主动向客户端推送消息的需求,但是轮询的效率低,非常浪费资源(因为必须不停连接,或者 HTTP 连接始终打开)。
- 为了更好的解决这个问题,于是出现了WebSocket
WebSocket
简介:
-
WebSocket 协议在2008年诞生,2011年成为国际标准。所有浏览器都已经支持了。
-
服务器可以主动向客户端推送信息,客户端也可以主动向服务器发送信息,是真正的双向平等对话,属于服务器推送技术的一种。
-
可以发送文本,也可以发送二进制数据。
-
协议标识符是
ws
(如果加密,则为wss
),服务器网址就是 URL。
websocket:websocket是长连接,是一个真的全双工,第一次tcp链路建立以后,后续所有数据双方都主动发送,不需要发送请求头,与传统的 http 协议不同,该协议允许由服务器主动的向客户端推送信息。与HTTP长连接不同,websocket可以更灵活的控制连接关闭的时机,而不是HTTP协议的Keep-Alive一到,服务端立马就关闭(这样很不人性化)。
优点:
- 建立在 TCP 协议之上,服务器端的实现比较容易。
- 与 HTTP 协议有着良好的兼容性。默认端口也是80和443,并且握手阶段采用 HTTP 协议,因此握手时不容易屏蔽,能通过各种 HTTP 代理服务器。
- 数据格式比较轻量,性能开销小,通信高效。
- 没有同源限制,客户端可以与任意服务器通信。
缺点:
- 使用 WebSocket 协议的缺点是在服务器端的配置比较复杂。