美文网首页
2020-04-03

2020-04-03

作者: emilyCandy | 来源:发表于2020-04-18 19:03 被阅读0次

    ## webSocket初探

    ## 目录

    - 为什么WebSocket

    - 什么是WebSocket

    - WebSocket JS Client

    - WebSocket Node Server

    ## 一、为什么WebSocket

    1、在WebSocket之前我们如何解决服务端向浏览器推送消息的需求?

    ![websocket](https://note.youdao.com/yws/api/personal/file/WEBf253aa1afe8b5cf993844253e539e85c?method=download&shareKey=94b0e9cc5afef83c076db6d8c112f5c9)

    2、http协议的弊端,和浏览器的限制;

    http协议 服务端只能够做到被动的等待客户端的请求,然后做返回;

    前端页面收到浏览器的限制并不能够直接在browser和server之间通过tcp的形式建立全双工的连接。

    因为要想实现,服务端推送数据,只能够近似的使用browser高频率请求server,来完成近似的推送;

    3、Websocket应运而生

    那在browser和server之间能不能有一条一次连接,多次使用的全双工通道,便于browser和server之间的数据交换呢?

    ## 二、什么是WebSocket

    ###  全双工通信

    ![websocket](https://note.youdao.com/yws/api/personal/file/WEB6697371b1a585300b3483edef64076c3?method=download&shareKey=4a87cc80d46432369ad617367d29752b)

    1、半双工数据传输允许数据在两个方向上传输,但是,在某一时刻,只允许数据在一个方向上传输,它实际上是一种切换方向的单工通信;在同一时间只可以有一方接受或发送信息,可以实现双向通信。举例:对讲机。

    2、全双工数据通信允许数据同时在两个方向上传输,因此,全双工通信是两个单工通信方式的结合,它要求发送设备和接收设备都有独立的接收和发送能力;在同一时间可以同时接受和发送信息,实现双向通信,举例:电话通信。

    ### 关于http通信模式的解释

    ![websocket](https://note.youdao.com/yws/api/personal/file/WEB6e262bc83e846e5b61a10c798fc2782b?method=download&shareKey=69ba32ee50bbeb171d5f6b9f20cafd22)

    ### 和HTTP的关系

    ![websocket](https://note.youdao.com/yws/api/personal/file/WEB85b53c72d70a7a08023dd346fe8e83e6?method=download&shareKey=cd6b92fd595089b577d2a061dd9438bf)

    websocket和Http协议是相互独立的、都是在 TCP 上的应用层协议。 但是借用了Http 1.1 协议的101状态码进行握手。

    ### 通信过程 

    ![websocket](https://note.youdao.com/yws/api/personal/file/WEB22e590db4f5467e18f5c5f7f70b43d1b?method=download&shareKey=6effc37612da096ccf5ae9a5772e31cc)

    1、

    HTTP通信流程

    TCP三次握手

    传送HTTP请求头

    传送HTTP请求体

    服务器处理后响应头

    服务器处理后响应体

    断开TCP连接

    2、WebSocket通信流程

    TCP三次握手

    WebSocket握手

    浏览器发送请求

    服务器发送响应

    断开TCP连接

    总结:其实可以看得出,WebSocket比HTTP还要多一次握手,但是在频繁交互过程中,WebSocket的优势就表现出来了。

    例如,当有10次数据交互时,前者要建立10个TCP连接(HTTP 1.0需要建立10次,HTTP 1.1可以通过长连接keep-alive复用TCP连接),然后要发送10次请求头(包含Cookie等信息,可能会达到K级别),接收的响应信息可能才几个字节(如某些心跳包),这样会极大的浪费带宽等资源。

    ### 协议头的详解

    - Connection: Upgrade, Upgrade:websocket

    明确发起的类型是webSocket协议

    - Sec-WebSocket-Version:告诉服务器所使用的 Websocket Draft

    - Sec-WebSocket-Key: 32pdAhmqFrFZik/MP7fU8A==

    握手的认证串,服务端需要将此key进行一定处理后返回,再由浏览器验证有效性,必须符合算法结果才可正常建立连接

    ## 三、WebSocket JS Client

    1、创建WebSocket实例

    new WebSocket('ws://127.0.0.1:3000')

    ![websocket](https://note.youdao.com/yws/api/personal/file/WEB3a44fa8b620adc9335e268d54a0440a2?method=download&shareKey=98dd70e3126fb7fe9d12417e2435dab2)

    readyState值如下:

    - 正在建立连接, WebSocket.OPENING

    - 已经建立连接, WebSocket.OPEN

    - 正在关闭连接, WebSocket.CLOSING

    - 已经关闭连接, WebSocket.CLOSE

    握手协议成功以后,readyState就从0变为1,并触发open事件,这时就可以向服务器发送信息了

    2、收发数据

    - 发送数据

    connection.send("hello, wolrd")

    ![websocket](https://note.youdao.com/yws/api/personal/file/WEBb1f92cdf4f8c658274666d49cd8cad5c?method=download&shareKey=2705442abb378b64bb4771ffc34aa1bd)

    - 接受数据

    通过onmessage函数进行回调

    ![websocket](https://note.youdao.com/yws/api/personal/file/WEB48cfaa5b0ff6379b2147cf82db6e29ca?method=download&shareKey=e2b3825a805ede9d91af621e0cb5b9cb)

    3、错误处理

    通过onerror函数进行回调

    4、关闭事件

    通过onclose函数进行回调

    ## 四、WebSocket Node Server

    1、创建WebSocket Server

    ![websocket](https://note.youdao.com/yws/api/personal/file/WEBc9aa35e709e05ec82a7e634057e94938?method=download&shareKey=eb47caf92d67c84a02716c5f602ef0cb)

    2、收发数据

    ![websocket](https://note.youdao.com/yws/api/personal/file/WEBf6007d0a92e611e1e5c75cc27658a92a?method=download&shareKey=957c9fa94f0329bd3cce386ce2b741ce)

    相关文章

      网友评论

          本文标题:2020-04-03

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