WebSocket 与 HTTP 关联的小知识~

一、什么是 WebSocket

  1. WebSocket 是 H5 规范提出的一种协议;目前除了 IE 浏览器,其他浏览器基本都支持。他是一种应用层协议,万变不离其宗,也是基于 TCP 协议的;和 HTTP 协议是并存的两种协议。
  2. WebSocket 是 H5 中的全双工通信协议:H5 Web Sockets 规范定义了 Web Sockets API,支持页面使用 Web Socket 协议与远程主机进行全双工的通信。它引入了 WebSocket 接口并且定义了一个全双工的通信通道,通过一个单一的套接字在 Web 上进行操作。
  3. WebSocket 建立的是持久连接:持久连接能够以最小的开销,高效地提供全双工 Web 连接。经常需要推送实时数据到客户端,相较于通过维护两个 HTTP 连接,来模拟全双工连接的旧的轮询或长轮询(Comet)来说,WebSocket 极大的减少了不必要的网络流量与延迟。
  4. 要使用 HTML5 Web Sockets 从一个 Web 客户端连接到一个远程端点,需要创建一个新的 WebSocket 实例并为之提供一个 URL 来表示想要连接到的远程端点。
  5. 该规范定义了 ws:// 以及 wss:// 模式来分别表示 WebSocket 和安全 WebSocket 连接,这就跟 http:// 以及 https:// 的区别差不多。
  6. 一个 WebSocket 连接,是在客户端与服务器之间 HTTP 协议的初始握手阶段将其升级到 Web Socket 协议来建立的,其底层仍是 TCP/IP 连接。

1. 区别

  1. WebSocket双向通信协议,模拟 Socket 协议,可以双向发送或接受信息。HTTP单向的。
  2. WebSocket 是需要浏览器和服务器握手进行建立连接的。而 http 是浏览器发起向服务器的连接,服务器预先并不知道这个连接。

2. 联系

WebSocket 在建立握手时,数据是通过 HTTP 传输的。但是建立之后,在真正传输时候是不需要 HTTP 协议的。

3. 总结

WebSocket 中,只需要服务器和浏览器通过 HTTP 协议进行一个握手的动作,然后单独建立一条 TCP 的通信通道进行数据的传送。

二、WebSocket 连接过程

  1. 首先,客户端发起 HTTP 请求,经过 3 次握手后,建立起 TCP 连接;HTTP 请求里存放 WebSocket 支持的版本号等信息,如:Upgrade、Connection、WebSocket-Version等;

  2. 然后,服务器收到客户端的握手请求后,同样采用 HTTP 协议回馈数据;

  3. 最后,客户端收到连接成功的消息后,开始借助于 TCP 传输信道进行全双工通信。

三、拓展知识

1. WebSocket 建立的是持久连接,而 HTTP 即使是 1.1,建立的也只是长连接

持久连接 在连接建立后,只要不主动关闭,连接就可以始终保持。而 长连接 就必须依赖 心跳包 等维持连接。长连接 借助 长轮询 实现。

2. 长轮询与短轮询的区别

短轮询 在服务器没有新数据时,响应一个表示空的数据,有新数据就响应新数据,不论怎样都要立即响应。长轮询 在没有新数据时,一直处于 pending 状态,直到有新数据才响应。然后开启下一次请求响应。

3. 长连接与持久连接的本质区别

HTTP 协议中,即使是 长连接,也只是在一个请求中可以发送多组 request / response,一次 request 依旧只能对应一次 response,轮询发送 HTTP request 检测更新状态的过程始终少不了,也就始终少不了这本不必要的资源浪费,并且,每个 request / response 都需要携带 header。但 WebSocket持久连接 就可以在连接建立后,不再需要发送 HTTP request,还可以让服务器主动响应数据。

4. HTTP 协议是无状态的,WebSocket 可以忽略这一问题

HTTP 协议是无状态的,那么每次 HTTP 请求都少不了身份验证,但 WebSocket 只建立一次连接,那么就只需要发送一次请求,进行一次身份验证,也就忽略了这个问题。

5. 单工、半双工、全双工的区别?

  • 单工:数据仅支持一个方向的传输,同一时间,只有一方能接受或发送消息。
  • 半双工:允许数据在两个方向传播,但同一时间,只允许数据在一个方向传输。一种切换了方向的单工通信。
  • 全双工:允许数据同时在两个方向传输,同一时间,可以同时接收、发送消息。

6. 两种协议的实现的实时通信有什么区别?

HTTP 协议的 实时通信 是存在延迟的,借助 轮询 实现实时通信,始终都存在延迟,并且因为需要维持连接,会非常消耗带宽等资源。而 WebSocket 建立的通道不断开,双方随时都可以拿到最新的数据,这才是真正意义上的 实时通信

7. 什么是多路复用?

WebSocket 实现的 多路复用,即多个 URL 可以复用一个 WebSocket 连接。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

麦田里的POLO桔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值