美文网首页
基于HTTP的功能追加协议

基于HTTP的功能追加协议

作者: 牛软糖 | 来源:发表于2017-06-07 22:28 被阅读0次

    Google 在 2010 年发布了 SPDY(取自 SPeeDY,发音同 speedy),其开发目标旨在解决 HTTP 的性能瓶颈,缩短 Web 页面的加载时间(50%)

    HTTP的瓶颈

    1)一条连接上只可发送一条请求

    2)请求只能客户端开始。客户端不可以接收除响应以外的指令

    3)请求/响应未经压缩就发送、首部信息越多延迟越大

    4)发送冗长的首部。发次都发送相同的首部浪费较多

    5)可任意选择压缩的数据格式。非强制压缩发送

    SPDY的设计和功能

    SPDY没有完全改写HTTP协议,而是在TCP/IP的应用层和传输层之间通过新加会话层的形式运作

    SPDY以会话层的形式加入,控制对数据的流动,但还是采用HTTP建立连接

    使用SPDY,HTTP协议额外获得以下功能:

    多路复用:通过单一的TCP连接,可以无限制处理多个HTTP请求

    赋予请求优先级:可以给请求逐个分配优先级,解决因低宽带而导致响应变慢的问题

    压缩HTTP首部:压缩HTTP请求的首部和响应的首部,减少数据包数量和发送的字节数

    推送功能:支持服务器主动向客户端推送数据功能,不用等待客户端的请求

    服务器提示功能:服务端可以主动提示客户端请求所需的资源

    WebSocket的设计和功能

    WebSocket,即Web浏览器和Web服务器之间全双工通信标准

    一旦Web服务器和客户端建立起WebScoket协议通信连接,之后所有的通信都依靠这个协议进行

    由于是建立在HTTP基础上的协议,因此连接的发起方仍是客户端,一旦建立连接,任意一方都可直接发送报文

    WebSocket协议的主要特点:

    推送功能:支持由服务端直接向客户端推送数据,而不用等待客户端的请求

    减少通信量:它的首部信量很少,因此通信量也相应减少

    为了实现WebSocket通信,在HTTP连接建立后,需要完成一次“握手”的步骤:

    握手*请求:为了实现WebSocket通信,需要在HTTP的首部添加Upgrade字段,告知服务器协议发送改变

    GET /chat HTTP/1.1

    Host: server.example.com

    Upgrade: websocket

    Connection: Upgrade

    Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==

    Origin: http://example.com

    Sec-WebSocket-Protocol: chat, superchat

    Sec-WebSocket-Version: 13

    Sec-WebSocket-Key是握手必不可少的键值

    Sec-WebSocket-Protocol是使用的子协议

    握手*响应:返回状态码101Switching Protocols的响应

    HTTP/1.1 101 Switching Protocols

    Upgrade: websocket

    Connection: Upgrade

    Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=

    Sec-WebSocket-Protocol: chat

    Sec-WebSocket-Accept是握手请求中Sec-WebSocket-Key的字段值生成的

    成功握手后,通信时不再使用HTTP的数据帧,采用WebSocket独立的数据帧

    WebSocket的API

    JavaScript 可调用“The WebSocket API”(http://www.w3.org/TR/websockets/,由 W3C 标准制定)内提供的 WebSocket 程序接口,以实现 WebSocket 协议下全双工通信。

    50ms发送一次数据实例:

    var socket = new WebSocket('ws://game.example.com:12010/updates');

    socket.onopen = function () {

    setInterval(function() {

    if (socket.bufferedAmount == 0)

    socket.send(getUpdateData());

    }, 50);

    };

    想要进一步了解WebSocket,看这里

    【腾讯Bugly干货分享】WebSocket 浅析

    相关文章

      网友评论

          本文标题:基于HTTP的功能追加协议

          本文链接:https://www.haomeiwen.com/subject/aaoafxtx.html