WebSocket(长链接)

作者: 枫之伊信 | 来源:发表于2018-06-21 13:29 被阅读53次

    一、WebSocket 定义

    WebSocket 是一种标准协议,用于在客户端和服务端之间进行双向数据传输。

    但它跟 HTTP 没什么关系,它是基于 TCP 的一种独立实现。

    WebSocket的出现,使得浏览器具备了实时双向通信的能力。

    HTTP 协议有一个缺陷:通信只能由客户端发起。

    WebSocket优点:支持双向通信,更灵活,更高效,可扩展性更好。

    二、以前客户端如何处理服务端的进度

    1、Ajax 轮询

    ajax轮询的原理非常简单,让浏览器隔个几秒就发送一次请求,询问服务器是否有新信息。

    ajax轮询 需要服务器有很快的处理速度和资源。(速度)

    2、 long poll 的方式

    原理跟 ajax轮询 差不多,都是采用轮询的方式,不过采取的是阻塞模型(一直打电话,没收到就不挂电话)

    long poll 需要有很高的并发,也就是说同时接待客户的能力。(场地大小)

    三、WebSocket 解决了 HTTP 的这几个难题。当服务器完成协议升级后( HTTP -> WebSocket )

    1、服务端可以主动推送信息给客户端,解决了轮询造成的同步延迟问题。

    2、由于 WebSocket 只需要一次 HTTP 握手,服务端就能一直与客户端保持通信,直到关闭连接,这样就解决了服务器需要反复解析 HTTP 协议,减少了资源的开销。

    WebSockets

    四、主流浏览器对 WebSocket 的支持情况比较好(不兼容低版本 IE,IE 10 以下)

    WebSocket浏览器

    五、这些需求可以考虑使用 WebSocket:

    1、多个用户之间进行交互;

    2、需要频繁地向服务端请求更新数据。

    比如弹幕、消息订阅、多玩家游戏、协同编辑、股票基金实时报价、视频会议、在线教育等需要高实时的场景。

    六、websocket 请求报文

    1) 客户端请求报文:

    重点请求首部意义如下:

    Connection: Upgrade:表示要升级协议
    Upgrade: websocket:表示要升级到websocket协议。

    Sec-WebSocket-Version: 13:表示websocket的版本。如果服务端不支持该版本,需要返回一个Sec-WebSocket-Versionheader,里面包含服务端支持的版本号。

    Sec-WebSocket-Key:与后面服务端响应首部的Sec-WebSocket-Accept是配套的,提供基本的防护,比如恶意的连接,或者无意的连接。

    例如:
    Sec-WebSocket-Key: sN9cRrP/n9NdMgdcy2VJFQ==
    Sec-WebSocket-Version: 13
    Upgrade: websocket
    Connection: Upgrade

    这个就是Websocket的核心了,告诉 Apache 、 Nginx 等服务器

    2) 服务端响应报文 Header

    服务端返回内容如下,状态代码101表示协议切换。到此完成协议升级,后续的数据交互都按照新的协议来。

    HTTP/1.1 101 Switching Protocols
    Connection:Upgrade
    Upgrade: websocket
    Sec-WebSocket-Accept: Oy4NRAQ13jhfONC7bP8dTKb4PTU=
    Sec-WebSocket-Protocol: chat

    说明:
    101 状态码表示服务器已经理解了客户端的请求,并将通过 Upgrade 消息头通知客户端采用不同的协议来完成这个请求;

    Sec-WebSocket-Accept 这个则是经过服务器确认,并且加密过后的 Sec-WebSocket-Key;
    Sec-WebSocket-Protocol 则是表示最终使用的协议。

    资料地址:
    https://juejin.im/post/5afab6e651882542ba07eb41?utm_medium=fe&utm_source=weixinqun

    相关文章

      网友评论

        本文标题:WebSocket(长链接)

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