美文网首页
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 请求要求“协议升级”,握手过程中有个非常简单的认证机制,目的是防止误连接。

相关文章

  • scoket是怎么建立连接的?

    socket.io, websocket websocket的特点websocket可以传输文本和二进制。webs...

  • Python WebSocket长连接心跳与短连接方法

    一、安装websocket-client 1、安装 pip install websocket-client 二、...

  • websocket

    一 、认识 二、特点 三、基本方法1 webSocket 实例 2 webSocket.readyState 3 ...

  • SRWebSocket源码解析

    WebSocket协议 中文翻译的WebSocket协议 SRWebSocket 一. 初始化 二. 建立连接 开...

  • WebSocket(二)

    WebSocket 的特点 WebSocket 是一个真正“全双工”的通信协议,与 TCP 一样,客户端和服务器都...

  • WebSocket 学习(二)node + WebSocket

    一. 环境准备 安装node,安装地址:https://nodejs.org/en/ 安装nodejs-webso...

  • WebRTC在线聊天室

    前言 之前写过关于websocket的文章《基于WebSocket的在线聊天室(一)(二)》,这次换成WebRTC...

  • 二维码扫描后更改

    二维码扫描后更改 鉴于昨天做的基于Websocket的消息推送,显然前台的二维码扫描后更改需要用Websocket...

  • swift network

    一. URLSession: 加载数据 下载数据 上传数据 post 二. WebSocket

  • WebSocket

    WebSocket Introduction WebSocket general:阮一峰的WebSocket 教程...

网友评论

      本文标题:WebSocket(二)

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