1. 来源与出处
WebSocket 来自 H5,是 H5 新增的众多规范和 API 中的一个。HTTP 协议就只有 HTTP 协议。
2. 二者的关联
WebSocket 协议基于 TCP 协议(WebSocket、HTTP 协议都基于 TCP 协议,TCP 协议相当于火车,WebSocket、HTTP 相当于火车里的两个人),WebSocket 需要借助 HTTP 先建立连接,即客户端发送转换协议的请求,服务器转换协议并响应101,接下来再发送的请求 / 响应既是基于 Websocket 协议。
3. WebSocket 建立的是持久连接,而 HTTP 即使是1.1,建立的也只是长连接
持久连接 在连接建立后,只要不主动关闭,连接就可以始终保持。而 长连接 就必须依赖 心跳包 等维持连接。长连接 借助 长轮询 实现。
4. 长轮询与短轮询的区别
短轮询 在服务器没有新数据时,响应一个表示空的数据,有新数据就响应新数据,不论怎样都要立即响应。长轮询 在没有新数据时,一直处于 pending 状态,直到有新数据才响应。然后开启下一次请求响应。
5. 长连接与持久连接的本质区别
HTTP 协议中,即使是 长连接,也只是在一个请求中可以发送多组 request / response,一次 request 依旧只能对应一次 response,轮询发送 HTTP request 检测更新状态的过程始终少不了,也就始终少不了这本不必要的资源浪费,并且,每个 request / response 都需要携带 header。但 WebSocket 的 持久连接 就可以在连接建立后,不再需要发送 HTTP request,还可以让服务器主动响应数据。
6. HTTP 协议是无状态的,WebSocket 可以忽略这一问题
HTTP 协议是无状态的,那么每次 HTTP 请求都少不了身份验证,但 WebSocket 只建立一次连接,那么就只需要发送一次请求,进行一次身份验证,也就忽略了这个问题。
7. 单工、半双工、全双工的区别?
- 单工:数据仅支持一个方向的传输,同一时间,只有一方能接受或发送消息。
- 半双工:允许数据在两个方向传播,但同一时间,只允许数据在一个方向传输。一种切换了方向的单工通信。
- 全双工:允许数据同时在两个方向传输,同一时间,可以同时接收、发送消息。
8. 两种协议的实现的实时通信有什么区别?
HTTP 协议的 实时通信 是存在延迟的,借助 轮询 实现实时通信,始终都存在延迟,并且因为需要维持连接,会非常消耗带宽等资源。而 WebSocket 建立的通道不断开,双方随时都可以拿到最新的数据,这才是真正意义上的 实时通信。
9. 什么是多路复用?
WebSocket 实现的 多路复用,即多个 URL 可以复用一个 WebSocket 连接。
10. WebSocket 连接可能会一种一种半死不活的状态
在连接的双方之间,有很多 路由节点,这些节点可能会自作主张断开 WebSocket 连接,又不通知双方。计算机网络协议栈 的实现中会产生一层一层的缓存,除非堆满这些缓存,否则双方都无法察觉。Ping/Pong Frame 即是用来解决这以问题的一个设计,Frame 只包含一些元数据,可以在不影响 Appliction 的情况下维持中间网络连接状态。
|