ECMAScript 2019 中的 Increase WebSocket Protocol 详解:实测抗压性强啊!

WebSocket 是一种在客户端和服务器之间建立双向通信的技术。既然是双向的,WebSocket 就可以用于聊天室、实时协作等场景。在 ECMAScript 2019 中,我们看到了增强型协议(Improvements to the WebSocket Protocol),它提供了更好的性能和可靠性,下面我们来看看这个新特性。

WebSocket 简介

WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通信的协议。基于 WebSocket 协议,浏览器和服务器可以进行全双工通信,实现了真正的实时性。不同于 Ajax 轮询和 Comet 长轮训的方式,WebSocket 采用了握手协议,建立起连接之后,建立了一个持久化的连接,并通过心跳包来保持连接。

下面是一个 WebSocket 连接示例:

----- ------ - --- ---------------------------------
------------- - ---------- -
  ---------------------- --------
-
---------------- - --------------- -
  -------------------- - ------------
-
-------------- - --------------- -
  -- ---------------- -
    ---------------------- ----------
  - ---- -
    ---------------------- ---------
  -
-
-------------- - --------------- -
  -------------------------------
-

当 WebSocket 连接建立后,onopen 回调函数会被触发,表示连接已建立。当服务器端发送消息时,onmessage 回调函数会被触发,传入的 event 参数就是消息内容。当 WebSocket 连接主动断开或被动断开时,onclose 回调函数会被触发。当 WebSocket 连接发生错误时,onerror 回调函数会被触发。

以上就是关于 WebSocket 的基本介绍,下面我们来看看 ECMAScript 2019 中提供的增强型协议。

增强型协议

在 ECMAScript 2019 中,WebSocket 的协议进行了增强,提供了更好的性能和可靠性。主要增加了以下特性:

二进制数据发送与接收

在 ECMAScript 2019 之前,WebSocket 的数据传输都是纯文本格式。现在,我们可以使用 ArrayBuffer 和 Blob 等二进制格式进行数据的发送与接收。下面是发送二进制数据的示例:

----- ----------- - --- ----------------
----- ---- - --- ----------------------
----------------- -----
----------------- -----
------------------ -------
------------------- -------

----- ------ - --- ---------------------------------
------------- - ---------- -
  -------------------------
-

在这个示例中,我们先创建了一个 16 字节的 ArrayBuffer,然后使用 DataView 对其进行操作。最后,我们使用 socket.send() 方法将数组缓存发送到服务器端。

在服务器端接收到这个数据包后,我们可以使用如下代码解析它:

----- ----------- - --- ----------------
----- ---- - --- ----------------------

-------------------- ----------------- -
  ---------------- -------------------------
  ---------------- -------------------------
  ------------------ ------------------------
  ------------------- -------------------------
---

使用 readUInt32BE() 和 readFloatBE() 方法对二进制数据进行解析,然后再使用 DataView 对其进行包装。

WebSocket 错误代码

在 ECMAScript 2019 中,WebSocket 新增了错误代码,具体如下:

  • 1006:连接关闭且无法读取数据(一般出现在 ping/pong 异常时)
  • 1011:服务器端无法处理请求,可能是由于协议版本不兼容或请求格式不正确造成的
  • 1012:服务器重启或关闭导致的 WebSocket 连接断开
  • 1013:WebSocket server 收到了超过它能处理的数据,导致连接断开
  • 1015:TLS 握手失败(该错误是一个保留错误码,不能作为普通错误处理)

在上述代码中,如果错误码不为 1000,需要进行额外的错误处理。特别是当错误码为 1006 时,表示连接关闭且无法读取数据,可能是因为 ping/pong 异常,因此我们需要进行 ping/pong 维护,可以使用 WebSocket 的 heartbeats 库来解决这个问题。

心跳包维护

在 ECMAScript 2019 中,WebSocket 增加了对心跳包的支持。心跳包可以用于维护连接状态,防止连接因为长时间不活动而被关闭。

下面是心跳包的示例代码:

----- ------ - --- ---------------------------------
--- ----------------- - -----

------------- - ---------- -
  ----------------- - ---------------------- -
    --------------------
  -- -------
-

---------------- - --------------- -
  -- ----------- --- ------- -
    -- --- ----------
  -
-

-------------- - ---------- -
  ---------------------------------
-

在这个示例代码中,我们使用 setInterval() 方法定时发送 ping 包,接收到 pong 包后,什么也不做。当 WebSocket 连接断开时,我们需要清除掉定时器。

总结

ECMAScript 2019 的增强型 WebSocket 协议提供了更好的性能和可靠性。在新的协议中,我们可以使用 ArrayBuffer 和 Blob 等二进制格式进行数据传输,同时还增加了 WebSocket 错误代码和心跳包维护。无论是在开发聊天室、实时协作等场景下,都可以使用 WebSocket 技术来提升应用的实时性和性能表现。

来源:JavaScript中文网 ,转载请联系管理员! 本文地址:https://www.javascriptcn.com/post/652df3257d4982a6ebf0a1b3


猜你喜欢

  • 视障人士如何通过无障碍浏览器在线购物

    随着数字化时代的到来,网上购物已成为人们日常消费的重要方式之一。然而,对于视力有障碍的人来说,使用电脑和智能手机进行网购可能会成为一大障碍。为此,无障碍浏览器已经成为了一个非常重要的工具,为各种残障的...

    1 年前
  • 通过 Webpack 打包 Vue.js 单页面应用 (SPA) 实现应用优化

    前端开发中,优化应用是一个非常重要的部分。通过 Webpack 打包 Vue.js 单页面应用 (SPA),可以进一步优化应用性能,提高页面加载速度和用户体验。在本文中,将介绍如何通过 Webpack...

    1 年前
  • 取代 eval:ECMAScript 2019 推出的函数字符串直接执行更安全!

    取代 eval:ECMAScript 2019 推出的函数字符串直接执行更安全! 随着前端开发的不断发展壮大,JavaScript 已经成为了前端开发的一大核心技能。

    1 年前
  • ES11 中的 Numeric Separators 对数值可读性的提高

    ES11(也称作 ECMAScript 2020)是 JavaScript 的新版本,其中一个非常实用的特性就是 Numeric Separators(数字分隔符)。

    1 年前
  • 在 Angular 中使用 filter 过滤器时遇到的问题及解决方案

    在 Angular 中使用 filter 过滤器时遇到的问题及解决方案 Angular 是一个流行的前端框架,它使用模块化的方式来组织代码,并提供了许多有用的指令和过滤器来处理数据。

    1 年前
  • 如何使用 RxJS 中的 pairwise() 操作符快速检测并修复前后端之间的通信问题

    随着前端技术的不断变化和发展,前端工程师需要不断深入学习和掌握各种新技术和工具,以便更好地解决前端开发中遇到的各种问题。其中,RxJS(Reactive Extensions Library for ...

    1 年前
  • 如何在网格布局中实现多重网格?

    网格布局是一种新的布局模型,它可以让我们在网页中更加简单、高效地进行布局,使得页面排版工作变得更加容易。随着网格布局的不断发展,越来越多的人开始使用它来进行页面设计。

    1 年前
  • ES6 中新增的 Symbol 数据类型的使用方法详解

    在 ES6 中,新增了一种原始数据类型 Symbol,它可以用来创建唯一的标识符,解决属性名冲突的问题。本文将详细介绍 Symbol 的使用方法,包括创建 Symbol、Symbol 的属性和方法、S...

    1 年前
  • ESLint 如何解决组件必须包含指定的 Props 报错

    前言 在前端开发中,我们经常会遇到组件必须包含指定的 Props 的情况。相信很多开发者都曾经遇到过这样的问题,当缺少这些必要的 Props 时,代码会因为缺少数据而无法正常运行,甚至会出现程序崩溃的...

    1 年前
  • 使用 Kubernetes 自动化部署 Web 服务指南

    在当今的软件开发生态中,容器化和自动化部署已经成为了主流的趋势,Kubernetes 作为当前最热门的容器编排与管理平台,被广泛应用于微服务系统的部署。本文将为大家详细介绍如何使用 Kubernete...

    1 年前
  • Mongoose 中的 Schema 和 Model 解析:如何实现业务逻辑

    作为 Node.js 开发者,我们时常需要处理数据持久化,并与数据存储进行交互。Mongoose 是一个基于 Node.js 平台的 MongoDB ODM(Object Document Model...

    1 年前
  • Deno 的多进程处理技巧

    Deno 是一种运行 JavaScript 和 TypeScript 的运行时环境。与 Node.js 不同,Deno 具有默认启用的安全性功能、更好的开发者体验,同时还提供了原生支持 TypeScr...

    1 年前
  • 如何根据响应式设计在 SAS 中设置媒体查询?

    随着移动设备的普及,设计响应式网站已经变得越来越重要。响应式设计的目标是为了让网站在不同尺寸和设备上都能够完美呈现,并且提供更好的用户体验。在前端开发中,使用媒体查询是实现响应式设计的关键之一。

    1 年前
  • Cypress 自动化测试:如何在浏览器中预览某个测试用例?

    前端自动化测试已经成为了现代 Web 开发流程的必不可少的一部分。Cypress 是一个支持现代 Web 技术的自动化测试工具。它基于 Node.js 和 Electron 构建,能够在 Chrome...

    1 年前
  • React 单元测试框架 Jest 与 Enzyme 使用完全指南详解

    在 React 开发中,单元测试是非常重要的一环。而在 React 单元测试中,使用 Jest 与 Enzyme 框架结合使用可以提升测试效率和代码质量。 Jest Jest 简介 Jest 是一个开...

    1 年前
  • Vue.js 的性能优化实践与方法总结

    Vue.js 是目前最热门的前端框架之一,它具有响应式、组件化等优秀的特性,可以方便地开发出高质量的 Web 应用。然而,随着项目规模的不断扩大, Vue.js 应用的性能问题也会逐渐暴露出来。

    1 年前
  • PWA 离线缓存和在 iOS 中的问题 —— 一个完美的解决方案之旅

    前言 随着移动设备的普及,越来越多的网站开始采用 PWA 技术,从而提供更加优秀的用户体验。其中,PWA 的离线缓存功能是许多网站所关注的焦点,因为它可以帮助用户在网络环境不好或无法连接互联网时,仍能...

    1 年前
  • Babel 无法识别 ES6 import/export 语法的解决方法

    在现代前端开发中,ES6 已经成为了主流的编写 JavaScript 代码的方式,它引入了一系列非常实用的语法和新特性,比如箭头函数、类、模板字符串等。然而,当我们想要使用 ES6 中的 import...

    1 年前
  • 如何使用 Koa.js 实现爬虫程序

    在 web 开发中,爬虫程序是很常见的。它可以帮助我们获取互联网上的数据,并进行分析和处理。在这篇文章中,我们将介绍如何使用 Koa.js 实现一个简单的爬虫程序。

    1 年前
  • Jest 测试 Express.js 应用

    关于 Jest Jest是一个非常流行的JavaScript测试框架。它具有快速、直观和强大的功能,是React官方推荐的测试框架,也被许多开发者广泛使用。Jest不仅支持单元测试、集成测试和端到端测...

    1 年前

相关推荐

    暂无文章