第9章 基于HTTP的功能追加协议

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u010369338/article/details/70269709

HTTP协议的瓶颈
为了让用户及时看到最新的消息,服务端一有更新就需要直接反馈到客户端,若想实现,那么HTTP标准则会成为瓶颈!

HTTP协议的瓶颈

  • 一次连接只能发送一条请求。
  • 请求只能从客户端发出,服务端不可以接受响应以外的指令。
  • 请求/响应未经过压缩就直接发送,头部信息越多延迟越大。
  • 发送冗长的头部,每次相同的头部造成的浪费较多。
  • 可任意选择压缩格式。不强制压缩。

Ajax的解决办法

Ajax只请求部分内容,响应中传输的数据会因此减少,但是实时的获取内容依旧会产生大量的请求,所以Ajax实质上并没有解决HTTP协议的瓶颈问题。

Comet的解决办法

Comet发送请求之后会先将响应挂起,等服务端有更新之后在返回响应。这是一种通过延迟应答来实现服务端向客户端推送内容的策略(`server push`)。
但是客户端为了维持连接会消耗更多的资源,所以Comet也没有解决HTTP协议的瓶颈问题。

使用浏览器进行双工通信的WebSocket

WebSocket技术是为了解决AjaxCometXMLHttpRequest隐患带来的问题而产生的。

WebSocket 协议

一旦服务端与服务端建立起`WebSocket`协议的通信,之后一切的通信都依靠这个专用的协议进行。
通信过程中可以发送JSON、XML、HTML或图片等任意格式的数据
WebSocket 功能
  • 推送
    服务端可以主动推送数据给客户端
  • 减少通信量
    只要建立起WebSocket通信,便一直保持连接减少了不必要的开销。另外头部相对于HTTP头部来说小很多。

为了实现WebSocket通信,在HTTP建立连接之后需要进行一次握手(HandShaking)。

握手-请求

  • 需要在Upgrade头部字段中声明WebSocket告知服务器协议发生变化。
  • Sec-WebSocket-Key记录着握手过程中必不可少的键值。
  • Sec-WebSocket-Protocol 记录使用的子协议。

子协议按WebSocket协议标准在连接分开使用时,定义哪些连接的名称。

握手-响应

  • 对于之前的响应返回101(Switching Protocol)响应。
  • Sec-WebSocket-Accpet是由请求头中的Sec-WebSocket-key字段的值生成的。

猜你喜欢

转载自blog.csdn.net/u010369338/article/details/70269709