美文网首页
WebSocket(二)

WebSocket(二)

作者: _1633_ | 来源:发表于2020-12-21 23:47 被阅读0次

    WebSocket 的特点

        WebSocket 是一个真正“全双工”的通信协议,与 TCP 一样,客户端和服务器都可以随时向对方发送数据,而不用像 HTTP“你拍一,我拍一”那么“客套”。于是,服务器就可以变得更加“主动”了。一旦后台有新的数据,就可以立即“推送”给客户端,不需要客户端轮询,“实时通信”的效率也就提高了。

        WebSocket 采用了二进制帧结构,WebSocket 没有使用 TCP 的“IP 地址 + 端口号”,而是延用了 HTTP 的URI 格式,但开头的协议名不是“http”,引入的是两个新的名字:“ws”和“wss”,分别表示明文和加密的 WebSocket 协议。

        WebSocket 的默认端口也选择了 80 和 443,因为现在互联网上的防火墙屏蔽了绝大多数的端口,只对 HTTP 的 80、443 端口“放行”,所以 WebSocket 就可以“伪装”成HTTP 协议,比较容易地“穿透”防火墙,与服务器建立连接WebSocket 的握手

        WebSocket 的握手是一个标准的 HTTP GET 请求,但要带上两个协议升级的专用头字段:

            “Connection: Upgrade”,表示要求协议“升级”;

            “Upgrade: websocket”,表示要“升级”成 WebSocket 协议。

        另外,为了防止普通的 HTTP 消息被“意外”识别成 WebSocket,握手消息还增加了两个额外的认证用头字段(所谓的“挑战”,Challenge):

            Sec-WebSocket-Key:一个 Base64 编码的 16 字节随机数,作为简单的认证密钥;

            Sec-WebSocket-Version:协议的版本号,当前必须是 13。

        浏览器是一个“沙盒”环境,有很多的限制,不允许建立 TCP 连接收发数据,而有了WebSocket,我们就可以在浏览器里与服务器直接建立“TCP 连接”,获得更多的自由。

        不过自由也是有代价的,WebSocket 虽然是在应用层,但使用方式却与“TCPSocket”差不多,过于“原始”,用户必须自己管理连接、缓存、状态,开发上比 HTTP复杂的多,所以是否要在项目中引入 WebSocket 必须慎重考虑。


    总结

        1. HTTP 的“请求 - 应答”模式不适合开发“实时通信”应用,效率低,难以实现动态页面,所以出现了 WebSocket;

        2. WebSocket 是一个“全双工”的通信协议,相当于对 TCP 做了一层“薄薄的包装”,让它运行在浏览器环境里;

        3. WebSocket 使用兼容 HTTP 的 URI 来发现服务,但定义了新的协议名“ws”和“wss”,端口号也沿用了 80 和 443;

        4. WebSocket 使用二进制帧,结构比较简单,特殊的地方是有个“掩码”操作,客户端发数据必须掩码,服务器则不用;

        5. WebSocket 利用 HTTP 协议实现连接握手,发送 GET 请求要求“协议升级”,握手过程中有个非常简单的认证机制,目的是防止误连接。

    相关文章

      网友评论

          本文标题:WebSocket(二)

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