出现的原因:

HTTP 的“请求 - 应答”模式是“半双工”的,虽然可以双向收发数据,但同一时刻只能一个方向上有动作,传输效率低。

更关键的一点,它是一种“被动”通信模式,服务器只能“被动”响应客户端的请求,无法主动向客户端发送数据。

不适合开发“实时通信”应用,效率低,难以实现动态页面,所以出现了 WebSocket。


WebSocket

WebSocket是一种基于 TCP 的轻量级网络通信协议,在地位上是与 HTTP“平级”的。

WebSocket 是一个“全双工”的通信协议,相当于对 TCP 做了一层“薄薄的包装”,让它运行在浏览器环境里。

WebSocket 使用兼容 HTTP 的 URI 来发现服务,但定义了新的协议名“ws”和“wss”,端口号也沿用了 80 和 443。

WebSocket 利用 HTTP 协议实现连接握手,发送 GET 请求要求“协议升级”,握手过程中有个非常简单的认证机制,目的是防止误连接。

WebSocket 是一个真正“全双工”的通信协议,与 TCP 一样,客户端和服务器都可以随时向对方发送数据。一旦后台有新的数据,服务器就可以立即“推送”给客户端,不需要客户端轮询,“实时通信”的效率也就提高了。