WebSocket
what
- WebSocket 是 HTML5 下的一种新协议,建立在 TCP 协议之上。
- 一次握手、持久连接、双向通信(主要还是服务端推送)
- 协议标识符是 ws(如果加密,则为 wss),如 ws://localhost:8888
过程
- 客户端经过 3 次握手建立 TCP 连接,发送 http 请求(http 请求中存放 WebSocket 的一些信息,Upgrade、Connection、WebSocket-Version 等)
- 服务端接收到请求,同样采用 http 返回数据。
- 客户端收到连接成功的消息,借助 TCP 通道进行全双工通信。
说明:Upgrade: websocket;Connection: Upgrade;
告诉服务器我是一个 WebSocket 协议,而不是 http
心跳包用途
- 定时发送消息,防止服务端超时自动断线。
- 检测连接是否正常,如果发送一个消息后服务端没有响应,应重新建立连接。
WebSocket 与 http 的关系
相同点:
- 都是基于 TCP,都是可靠性的传输协议。
- 都是应用层协议。
不同点:
- WebSocket 是双向通信, http 为单向(HTTP/2 也支持服务端推送,但是只能推送静态资源)
- WebSocket 需要先发送一次 http 请求,服务端和客户端握手一次后才建立连接,而 http 是直接向服务器发送请求。
联系:
- WebSocket 在建立握手时,数据是通过 HTTP 传输的。但是建立之后,在真正传输时候是不需要 HTTP 协议的。