WebSocket学习笔记

一.什么是WebSocket

  WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工(full-duplex)通讯的协议。没有了 Request 和 Response 的概念,两者地位完全平等,连接一旦建立,就建立了真持久性连接,双方可以通过WebSocket随时向对方发送数据。

WebSocket有如下特性:

  • 伴随着HTML5而出现
  • Web端的Socket, 服务器端和客户端可相互发送消息
  • 本质上是TCP连接
  • 为解决客户端与服务端实时通信而产生的技术

现有的用于服务器和客户端之间的双工通信技术:

  • 轮询(Polling):
      客户端每隔固定时间向后台发送一次请求,询问服务器是否有新数据。
    缺点:
    1.延迟,需要固定的轮询时间,不一定是实时数据。
    2.大量耗费服务器内存和宽带资源,因为不停的请求服务器,很多时候 并没有新的数据更新,因此绝大部分请求都是无效请求。
  • 长轮询(Long Polling):
      客户端发送 HTTP 给服务器之后,有没有新消息,如果没有新消息,就一直等待。直到有消息或者超时了,才会返回给客户端。消息返回后,客户端再次建立连接,如此反复。
    优点:在某种程度上减小了网络带宽和 CPU 利用率等问题。
    缺点:
    1.如果是高实时的系统,肯定不会采用这种办法。因为一个 GET 请求来回需要 2个 RTT,很可能在这段时间内,数据变化很大,客户端拿到的数据已经延后很多了。
    2.网络带宽低利用率的问题也没有从根源上解决。每个 Request 都会带相同的 Header。
    注:
    RTT(Round-Trip Time): 往返时延。在计算机网络中它是一个重要的性能指标,表示从发送端发送数据开始,到发送端收到来自接收端的 确认(接收端收到数据后便立即发送确认),总共经历的时延RTT(Round-Trip Time): 往返时延。在计算机网络中它是一个重要的性能指标,表示从发送端发送数据开始,到发送端收到来自接收端的 确认(接收端收到数据后便立即发送确认),总共经历的时延。
  • 数据流(Streaming):
      服务器保持连接打开并与客户端一起激活,直到并且除非提取所需的数据。在这种情况下,连接是无限期打开的。
    缺点:
    1.流传输包括HTTP标头,这会增加文件大小,增加延迟。
    2.在服务器往客户端推送,这个方向的流实时性比较好。但是依旧是单向的,客户端请求服务器依然还需要一次 HTTP 请求。
  • AJAX:
      AJAX基于Javascript的 XmlHttpRequest 对象。它是Asynchronous Javascript和XML的缩写形式。XmlHttpRequest 对象允许执行Javascript而无需重新加载完整的网页。AJAX仅发送和接收网页的一部分。
    缺点:
    1.需要发送HTTP标头,这使数据量更大。
    2.是半双工的。
    3.服务器消耗更多资源

你可能感兴趣的:(前端websocket)