WebSocket (2)

141 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第21天,点击查看活动详情

上次提到以前对 WebSocket 不是很熟悉,所以上次对 WebSocket 做了一个简单的引入,梳理了 WebSocket 链接建立过程的原理。今天继续,主要说一下 WebSocket 跟 Http 之间的区别,因为上次也提到了 WebSocket 跟 Http 比较相似,但二者其实还是有区别的......

Http 链接

Http 链接分为短链接,长链接。短链接是每次请求都要三次握手才能发送自己的信息。即每一个 Request 对应一个 Response。长链接是在一定的期限内保持链接,保持TCP连接不断开。客户端与服务器通信,必须要有客户端发起然后服务器返回结果。客户端是主动的,服务器是被动的。不论短链接,长链接都是使用 Ajax 轮询来实现实现推送功能。

  • 短轮询:浏览器定时向服务器发送请求,服务器收到请求不管是否有数据到达都直接响应 请求,隔特定时间,浏览器又会发送相同的请求到服务器, 获取数据响应;
  • 长轮询:浏览器发起请求到服务器,服务器一直保持连接打开,直到有数据可发送。发送完数据之后,浏览器关闭连接,随即又发起一个到服务器的新请求。这一过程在页面打开期间一直持续不断;

无论是长轮询还是短轮询,浏览器都要先发起对服务器的连接,才能接收数据,并且实时交互性很低。

WebSocket 链接

建立了 WenSocket 链接之后,服务器不必在浏览器发送 Request 请求之后才能发送信息到浏览器。这时的服务器已有主动权,想什么时候发就可以发送信息到服务器。而且信息当中不必在带有 Head 部分的信息了。这种方式不仅能降低服务器的压力,而且信息当中也减少了部分多余的信息。

Http 链接与 WebSocket 链接相同点

  1. 都是基于 TCP 协议基础上,Http 如此,WebSocket 亦如此;
  2. 都是需要经过 Request,Response 阶段,其中 WebSocket 在发起请求的时候其实相当于借用了 Http 的头部格式,区别就在于 WebSocket 请求头部有一个 Upgrade:websocket 这样的字段 (当然还有其他字段,但是这个字段最为关键) 所以端口号是相同的不易被屏蔽;
  3. 如果请求失败,返回的错误编号都是相同的,例如:4** 等。

Http 链接与 WebSocket 链接不同点

  1. WebSocket 的请求的头部会跟 Http 请求头部有区别,比如多了一个 Upgrade:websocket 字段;
  2. WebSocket 只能是直连,不能通过代理来转发。究其原因应该怕如果通过代理转发的话,一个代理要承受如此多的 WebSocket 链接不释放,类似于一次 DDOS 攻击了;
  3. WebSocket 传输的数据是二进制流,是以帧为单位的;Http 传输的是明文传输,是字符串传输;
  4. WebSocket 是全双工通信,有点类似于 socket 通信,在建立连接之后不必再像 Http 那样这边一个 Request,那边才回一个 Response;WebSocket 想发就发,收发自如。

今天算是简单的整理了一下 Http 和 WebSocket 之间的相同与不同之处、二者之间的大致差别......而关于 WebSocket,其实还有很多需要梳理的,下次再说吧......
希望本文能够帮到你,如有错误,望指正!
我向你敬礼啊,Salute!