阅读 116

图解HTTP(08)——HTTP的局限及替代技术

这是我参与更文挑战的第8天,活动详情查看:更文挑战

互联网时代对HTTP更高的需求

建立HTTP时,主要是想把它作为传输HTML文档的协议。但是随着时代的发展,HTTP面对千万、上亿的并发,虽然能实现功能,但是性能上已经无法满足。

但是基于HTTP的浏览器已经遍布全球,无法直接抛弃HTTP,因此有许多新协议基于HTTP,加了不少新功能。

消除HTTP瓶颈的SPDY

Google在2010发布了SPDY,旨在解决HTTP的性能瓶颈。

HTTP瓶颈

如果有几百、上千万的用户发布内容,还要把内容更新到客户端上,纯粹使用HTTP就会遇到如下问题:

  • 一条连接上只可发送一个请求
  • 请求只可从客户端开始,客户端不可以接收除响应以外的指令
  • 请求/响应首部信息量大,导致延迟变大。同时也造成数据浪费
  • 可任意选择数据压缩格式,非强制压缩发送。

Ajax解决

使用Ajax只更新一部分页面,响应中传输的数据量会因此减少,从而提高性能。

Comet解决

这是一种模拟实现服务端向客户端推送的功能。

通常,服务器端接收到请求,在处理完毕后就会立即返回响应,但为 了实现推送功能,Comet 会先将响应置于挂起状态,当服务器端有内容更新时,再返回该响应。因此,服务器端一旦有更新,就可以立即反馈给客户端。

但是也因此连接时间变长了,消耗了更多的资源,其实并未实际解决HTTP协议真正的问题。

SPDY的目标

虽然出现了像Ajax、Comet这样的协议解决了一部分问题,但是HTTP协议本身的限制并无法解决,需要一些协议层面上的改进才行。

SPDY的设计与功能

前面介绍过TCP/IP分层的好处,这里就是一个例子。

0801.jpg

SPDY并没有完全改写HTTP协议,而是在TCP/IP的应用层与表示层中新添加了会话层。因此你仍然可以正常使用HTTP的方法

使用SPDY后你可以额外获得以下功能:

多路复用流

一个TCP连接可以无限制处理多个HTTP请求,效率得到提高。

赋予请求优先级

SPDY不仅能无限并发处理请求,还能给请求分配优先级顺序

压缩HTTP首部

这样依赖通信产生的数据包数量和发送的字节数就减少了

推送功能

服务器能直接像客户端推送数据

服务器提示功能

服务器可以主动提示客户端请求所需资源。

WebSocket使用

一旦客户端与服务器建立起WebSocket协议的通信连接,之后所有通信都依靠这个协议进行,可以传输JSON、XML、HTML或图片等任意格式的数据。

由于这个协议也是基于HTTP的,所以连接请求发起方仍然是客户端,但是一旦建立起连接以后,两端就都能主动发送报文了。

WebSocket的主要特点:

推送功能

服务器可直接发送数据,无需等待客户端的请求

减少通信量

这是一个长连接,可以减少每次连接的开销,并且首部信息也很少。

使用实例

var socket = new WebSocket('ws://game.example.com:12010/')
socket.onopen = function() {
    setInterval(function() {
        if (socket.bufferedAmmount == 0) {
          socket.send(getUpdateData())  
        }
    }, 50)
})
复制代码
文章分类
后端
文章标签