GraphQL 的新增功能:Subscription

GraphQL 是一种用于 API 的查询语言和运行时。 它提供了一种在客户端指定需要的数据的方式,而不是从服务端返回固定结构的响应。GraphQL 还提供了一组强大的工具来调试和优化查询,其中包括一个称为 Subscription 的新功能。 本文将介绍 GraphQL 的 Subscription 功能,探索它的特性,以及如何在前端应用程序中使用它。

Subscription 是什么?

Subscription 是一种 GraphQL 操作类型,它允许客户端订阅服务器上的事件并持续接收变更。与传统的查询和变更操作不同,Subscription 将允许实时更新客户端。例如,在聊天应用程序中,用户可以使用 Subscription 订阅聊天室中的新消息,而不必主动轮询服务器。

Subscription 的工作方式

Subscription 类似于 GraphQL 的查询和变更操作,但在客户端和服务器之间交换的是一个 WebSocket 连接。客户端发起订阅并接收更新,直到它主动取消订阅或销毁 WebSocket 连接。服务器保持 WebSocket 连接开放状态并向订阅者推送更新。

订阅的定义与查询和变更操作的定义类似。订阅操作与查询和变更操作都包含字段选择集,由客户端指定要接收的更新。例如,我们的 Subscription 类型可以定义如下:

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

这段定义表示,客户端可以订阅 newMessage 事件,并在任何给定的聊天室(由 roomId 参数引用)中接收新消息。当订阅成功时,服务器将返回 Message 类型的值。

接下来是 Subscription 的一个示例订阅和更新示例:

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

这段代码请求订阅在聊天室 123 中发布的新消息,并在这些消息发布时返回 idtext 以及发送者的 idname

在前端应用程序中使用 Subscription

在前端应用程序中使用 Subscription 的具体步骤取决于您在实现 GraphQL 客户端所使用的库。不过,无论您选择的是哪种工具,您都需要执行以下步骤:

  1. 建立 WebSocket 连接:在 Subscription 开始之前,客户端需要建立一个 WebSocket 连接。通常,您可以使用库的默认设置,但也可以根据需要自定义 WebSocket 配置。
------ - ------------------ - ---- -----------------------------

----- ------------------ - --- ----------------------------------------- -
  ---------- -----
---
  1. 创建 Subscription 对象:您需要使用 GraphQL 客户端的工具来构造 Subscription 对象。这个过程中包括定义 Subscription 的类型以及与服务器交互的 WebSocket 连接。
------ - --- - ---- -----------------
------ - ------------------ - ---- -----------------------------
------ - ------------- - ---- -------------------------

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

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

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

在这个例子中,我们使用 @apollo/client 库来创建 Subscription 对象。我们根据先前定义的 Subscription 定义 NEW_MESSAGE_SUBSCRIPTION,并使用 WebSocketLink 连接到 WebSocket 服务器。

  1. 订阅更新:最后,我们将 Subscription 对象传递给 GraphQL 客户端,执行订阅操作并处理返回的更新。
------ - --- - ---- -----------------
------ - ------------------ - ---- -----------------------------
------ - ------------- - ---- -------------------------

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

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

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

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

在这个例子中,我们使用 client.subscribe 方法订阅一个 NEW_MESSAGE_SUBSCRIPTION,并在每次收到更新时打印每个更新。

结论

GraphQL 的 Subscription 功能为 Web 应用程序提供了实时更新的功能,而无需轮询服务器。不管您构建的应用程序类型是什么,Subscription 都将成为理想的工具,为您提供实时更新数据的可能性。希望这篇文章对您有所指导和启示,让您更好地理解 Subscription,并掌握如何使用它。

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


猜你喜欢

  • React Redux 中的异步操作与副作用

    在 React 应用中,数据流管理是一个核心问题,特别是在大型复杂应用中。Redux 是一个流行的状态管理库,它为我们提供了单一的数据源。但是,如果我们需要在 Redux 中进行异步操作,如何实现呢?...

    9 天前
  • Object.fromEntries() 的功能和解决方案在 ES11 编程中的应用

    在 ES11(也称为 ECMAScript 2020)中,Object.fromEntries() 方法被引入到了 JavaScript 标准中。该方法用于将一个键值对数组转换为一个对象。

    9 天前
  • Serverless 即代码模式实践经验

    Serverless 即代码模式实践经验 Serverless(无服务器)即代码模式一直是前端领域的一个热门话题。它允许前端开发人员能够轻松地构建和部署应用程序,而无需担心基础设施管理的问题,如服务器...

    9 天前
  • 使用 Express.js 进行身份验证

    介绍 在前端开发中,身份验证是非常重要的一步。使用 Express.js 可以方便地进行身份验证,并且可以大大减少编写身份验证相关代码的工作量。Express.js 是一个基于 Node.js 平台的...

    9 天前
  • Next.js 的 SEO 优化技巧

    简介 Next.js 是一个流行的 React 框架之一,它提供了一个强大的服务端渲染 (SSR) 模式来提高网站性能和 SEO。虽然 Next.js 已经默认提供了很多 SEO 最佳实践,但为了进一...

    9 天前
  • 如何使用 Tailwind 添加图标?

    Tailwind 是一款非常受欢迎的前端工具,因其灵活而易于使用而备受推崇。该工具主要用于快速构建用户界面,并提供许多示例 CSS 样式,可以在添加一些自定义 CSS 样式后轻松应用于项目中。

    9 天前
  • Promise 的优化技巧及代码实践

    前言 Promise 是 ES6 中的异步编程解决方案,解决了回调函数地狱的问题,让异步编程变得更加简单和可读。然而,在编写大量的异步代码时,为了保持性能和可维护性,我们需要一些优化技巧和实践经验。

    9 天前
  • ECMAScript 2019 的扩展方法和属性

    随着每一年 ECMAScript 版本的发布,前端开发人员受益匪浅。ECMAScript 2019 这一版本的发布也不例外。该版本新增了一系列的扩展方法和属性,这些新增的特性可以让我们编写更加高效和优...

    9 天前
  • 如何在 Koa 应用程序中使用 Vue.js

    前言 Vue.js 是一种用于构建用户界面的渐进式框架。它不仅易于学习和使用,而且具有灵活性和可扩展性。Koa 是一个轻量级的 Node.js Web 应用程序框架,旨在提供更少的代码和更少的样板文件...

    9 天前
  • 如何开发 GraphQL 序列化程序?- 别样的流程处理技巧

    前言 在前端开发中,很多时候需要处理数据的序列化和反序列化,而 GraphQL 成为了越来越多人的选择。本文将介绍如何开发一个 GraphQL 序列化程序,同时分享一些别样的流程处理技巧,让你更好地处...

    9 天前
  • 解决 ECMAScript 2015 模块化系统的问题

    在现代前端开发中,模块化是必不可少的功能。ECMAScript 2015 引入了原生的模块化系统,可以方便地组织代码,并且可以异步加载模块以提高性能。但是,在实际使用中,我们可能会遇到一些问题。

    9 天前
  • 如何在 Vue 项目中使用 Mocha 进行单元测试?

    在前端开发中,单元测试是非常重要的一环。它能够保障代码的质量和稳定性,减少不必要的bug和开发后维护的时间和人力成本。在Vue项目中使用Mocha进行单元测试也是一个不错的选择。

    9 天前
  • Socket.io 跨域问题的解决方法

    在前端开发中,我们经常会使用到 Socket.io 实现实时通信的功能。但是,在实际开发中,我们有时会遇到跨域问题,导致 Socket.io 不能正常使用。本文将介绍 Socket.io 跨域问题的解...

    9 天前
  • Vue.js SPA 应用中常见的数据安全问题及解决方案

    随着单页应用程序的流行,Vue.js 成为了前端开发者最热门的框架之一。然而,随着单页应用程序的快速增长,相关的数据安全问题也开始受到更多的关注。在本文中,我们将讨论 Vue.js 单页面应用程序中遇...

    9 天前
  • PWA 技术如何实现应用的多端同步

    PWA(Progressive Web App)是一种创建类似于本地应用的 Web 应用程序的方式,其最大优势之一是可以将应用程序保存为主屏幕应用程序,同时保持所有功能都在浏览器中运行。

    9 天前
  • 如何解决 Web Components 中触发更新的问题

    Web Components 是一种自定义的 HTML 标签类型,可以用于创建可重用的组件、模块和部件。现在越来越多的前端工程师开始使用 Web Components 构建自己的网站和应用程序。

    9 天前
  • 如何在 Koa 应用程序中使用 React

    Koa 是一个非常受欢迎的 Node.js Web 框架,而 React 是一个流行的前端 JavaScript 库。在这篇文章中,我们将介绍如何在 Koa 应用程序中使用 React。

    9 天前
  • 快速解决 Fastify 中的请求体解析问题方法

    Fastify 是一个高性能的 Web 框架,适用于构建高效的 RESTful API 服务。它有着简洁、快速、易拓展、易维护等优点。但是在使用 Fastify 过程中,有时会遇到请求体解析问题,本文...

    9 天前
  • CSS Grid 布局:如何为你的内容选择列和行?

    CSS Grid 是一种强大的布局方式,它允许你在网格中排列网页内容,并为内容分配列和行。与传统的浮动和定位布局相比,CSS Grid 布局功能更加强大、灵活和易于理解。

    9 天前
  • Cypress 自动化测试的常见问题与解决方法

    Cypress 是一种前端自动化测试工具,它可以帮助开发人员编写高效、稳定和可维护的自动化测试,并快速验证应用程序的功能和性能。然而,在使用 Cypress 进行自动化测试时,您可能会遇到一些常见问题...

    9 天前

相关推荐

    暂无文章