WebSocket详解

      最后更新:2022-04-12 05:35

      文章目录

        • 为什么我们需要 WebSocket?
        • 简介
        • 客户端的简单示例
        • 客户端的 API
          • 具有建设性的 WebSock 函数
          • webSocket.readyState
          • webSocket.onopen
          • webSocket.onclose
          • webSocket.onmessage
          • webSocket.send()
          • webSocket.bufferedAmount
          • webSocket.onerror
        • 服务端的实现
        • WebSocketd

      WebSocket 协议是许多复杂功能所需要的网络通信协议。 此篇文章涵盖了如何使用 WebSocket 协议 。

      为什么我们需要 WebSocket?

      许多新加入WebSocket的人也有同样的问题:既然我们已经达成了HTTP协议,为什么我们需要另一个协议?它有什么好处呢?

      解决办法是直截了当的,因为HTTP协议有缺陷:通信只能由客户发起。

      例如,我们想要知道今天的天气, 只有当客户向服务器提出请求时, 服务器才会返回查询结果。 HTTP 协议无法让服务器主动向客户传递信息 。

      在这里插入图片描述

      此单向请求的特性对于客户来说很可能非常困难, 如果服务器的状态有持续变化, 则通知客户 。 我们只能使用“ 旋转 ” : 我们偶尔会发送关于服务器上任何新信息的询问 。

      查询效率低,浪费资源( 因为它们必须持续连接, 或者 HTTP 连接是开放的 apapapproachs ) 。 因此开发者想知道是否有更好的方法。 这就是 WebSocket 是如何开发的。

      简介

      WebSocket协议于2008年制定,2011年成为国际标准,得到了所有浏览器的支持。

      其最显著的特点是服务器能够将信息传送给客户和客户,将信息传送给服务器,这是一种真正的双向平等话语以及一种服务器传输技术。

      在这里插入图片描述

      其他特点包括:

      1. 服务器端使用 TCP 协议很容易执行 。
      2. 与 HTTP 协议的兼容性很高。 默认端口为 80 和 443, 握手阶段使用 HTTP 协议, 这使得多个 HTTP 代理服务器的握手难以屏蔽和使用。
      3. 数据格式较轻,性能成本低廉,通信有效。
      4. 您可以选择发送文本或二进制数据。
      5. 对同质性没有限制,客户可以与任何服务器互动。
      6. 协议是 ws (如果加密的话 ws), 服务器地址是 URL 。

      在这里插入图片描述

      客户端的简单示例

      WebSocket是一个非常基本的协议。

      以下是一个网络脚本的例子(点击这里查看运行结果), 乍看起来似乎是直截了当的。

      客户端的 API

      WebSocket 客户端的API如下:

      具有建设性的 WebSock 函数

      要构建一个新的 WebSocket 实例, WebSocket 对象将被用作构建函数 。

      客户端将在上述语句执行后连接到服务器。

      在此可找到样本对象所有特性和方法的列表 。

      webSocket.readyState

      readyState有四个属性返回到样本对象的当前状态。

      • 连接:0表示连接。
      • 开放:一个值表示连接已经建立,用户愿意互动。
      • 关闭:价值2表明连接正在关闭。
      • CLOSED: 价值 3 表示连接已经关闭或连接的打开失败 。

      下面是一个示例。

      webSocket.onopen

      示例对象的无打开属性在连接成功后提供回溯功能。

      您可以使用添加 EventListener 的方法来指定多个回声函数 。

      webSocket.onclose

      示例对象的结晶属性在连接关闭时提供回溯功能。

      webSocket.onmessage

      用于在接收服务器数据时指定回声函数的示例对象的信息属性。

      应当指出,服务器数据可以是文本数据,也可以是二进制数据(blob或Arraybuffer天体)。

      除了动态数据分类外,二类财产还可用于明确无误地确定收到的二类数据类型。

      webSocket.send()

      实例对象的send()该技术用于与服务器进行通信。

      发送文本的例子。

      发送布洛布物体样本。

      发送阵列布弗物体样本。

      webSocket.bufferedAmount

      实例对象的bufferedAmount属性,该属性指定有多少字节的二进制数据仍有待传输。它可用于评估发送是否完整。

      webSocket.onerror

      示例对象的单差属性,它定义了在报告错误时使用的回声函数。

      服务端的实现

      WebSocket 服务器通常使用三种节点实现类型之一。

      • µWebSockets
      • Socket.IO
      • WebSocket-Node

      有关文件应载有具体的用法,此处没有详细讨论。

      WebSocketd

      最后,我想建议一个独特的 WebSocket 服务器: WebSetd。

      其最显著的特点是后台脚本可以用任何语言写。 标准输入( stdin) 是 WebSocket 的输入, 标准输出( stdout) 是 WebSocket 的输出 。

      在这里插入图片描述

      这是巴什剧本的一个例子counter.sh。

      命令行执行此脚本, 产生一、 二和三个值, 间隔一秒 。

      开始 websocketd 并添加此脚本作为服务 。

      上述命令将在端口 8080 上启动 WebSocket 服务器。 当客户端连接到此服务器时, 它会执行对数. Sh 脚本, 并向客户端提供其输出 。

      这是客户端的 JavaScript 代码, 用于从控制台生成数字 1、 2、 3 。

      这样命令行输出就可以很容易地传送到浏览器中 。

      上面的命令会执行ls 命令将当前目录的内容传输到浏览器。这个方法很容易用于实时服务器监测(代码)。

      在这里插入图片描述

      通过提及官方实例,可以找到其他例子。

      • 在 Bash 脚本中读取客户输入样本
      • 可以使用五行代码创建基本的聊天服务器。

      在这里插入图片描述

      韦布塞特的精华,命令线路 WebSocket 代理 。只要命令线可以执行WebSocket 是一个可用于连接浏览器的协议 。节点js执行回声服务的情况见下文。 greeter.js 。

      以下是开始此脚本的顺序 。

      在官方仓库中可以找到更多的语言样本。

      本文由 在线网速测试 整理编辑,转载请注明出处。

          热门文章

          文章分类