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 的情况下维持中间网络连接状态。
|