返回顶部
首页 > 资讯 > 前端开发 > VUE >Node如何实现异步资源上下文共享
  • 836
分享到

Node如何实现异步资源上下文共享

2024-04-02 19:04:59 836人浏览 安东尼
摘要

这篇文章主要介绍“node如何实现异步资源上下文共享”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Node如何实现异步资源上下文共享”文章能帮助大家解决问题。异步资

这篇文章主要介绍“node如何实现异步资源上下文共享”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Node如何实现异步资源上下文共享”文章能帮助大家解决问题。

Node如何实现异步资源上下文共享

异步资源上下文共享,意味在一次网络请求生命周期或异步资源调用链中共享上下文数据。

回答这个问题之前,首先我们要先理解什么是异步资源。

异步资源

异步资源可以理解为是有回调的对象,比如但不限于 Promises、Timeouts、tcpWrap、UDP 等。详见异步资源的类型列表。

官方定义如下:

An asynchronous resource represents an object with an associated callback. This callback may be called multiple times, such as the 'connection' event in net.createServer(), or just a single time like in fs.open(). A resource can also be closed before the callback is called.

AsyncLocalStorage

这里介绍 node.js 官方提供的异步上下文共享方案 AsyncLocalStorage,该特性在 16.4.0 之前还是实验特性,16.4.0 之后已经稳定。

AsyncLocalStorage 可以在异步操作链中共享数据。

AsyncLocalStorage 实例 asyncLocalStorage 有以下几个主要方法:

  • disable() 禁用 asyncLocalStorage;

  • getStore() 返回当前上下文 store,该 store 须通过 asyncLocalStorage.run() 或 asyncLocalStorage.enterWith() 来进行异步上下文初始化;

  • enterWith(store) 通过该方法传入上下文 store,在后续所有的异步调用中均可以获取该 store;

示例:

const store = { id: 1 };
// Replaces previous store with the given store object
asyncLocalStorage.enterWith(store);
asyncLocalStorage.getStore(); // Returns the store object
someAsyncOperation(() => {
  asyncLocalStorage.getStore(); // Returns the same object
});
  • run(store, callback[, ...args]) 通过 run 来指定上下文 store 和其生效的 callback 函数,该 store 将只能在该callback 函数中被获取到。

  • exit(callback[, ...args])

asyncLocalStorage.run() 函数第一个参数是存储我们在异步调用中所需要访问的共享数据,第二个参数是一个异步函数。

下面通过一个例子来演示如何使用 AsyncLocalStorage 来实现异步资源上下文共享:

Node如何实现异步资源上下文共享

输出:

runA 8f19ebef-58d7-4b1a-8b9b-46d158beb5d2 2022/5/24 20:26:17 this is a log message
runB 8f19ebef-58d7-4b1a-8b9b-46d158beb5d2 2022/5/24 20:26:17 this is a log message

通过 asyncLocalStorage.run 运行的同一个异步函数中,会运行函数 runA 和函数 runB,runA 和 runB 可以访问到相同的上下文数据。

性能问题

AsyncLocalStorage 为我们在 Node.js 中轻松实现异步资源上下文共享提供了很大遍历,但是每次异步资源操作都会触发 Async Hooks,势必会对我们的 Node 应用性能造成一定影响。那么影响到底有多大呢?

根据 Kuzzle 的一个实测,使用 AsyncLocalStorage 大概会造成 8% 的额外性能损耗,当然不同的业务场景可能会有不同的性能表现。如果大家关注这部分性能表现,也可以在自己的业务中增加对比测试,测试具体性能影响。

----Log with AsyncLocalStorageLog classicdifference
req/s26132842〜8%

应用场景

在其他多线程语言中,每个 Http 创建一个新的线程,每个线程拥有自己的内存。你可以在在线程内存中存储全局状态,并在代码的任何位置获取到全局状态。

在 Node.js 中,因为 Node.js 是单线程的,会在所有 HTTP 请求中共享内存,所以每个 HTTP 请求无法做到持有相互隔离的全局状态。

AsyncLocalStorage 可以有效隔离不同异步操作之间的状态,在 HTTP 请求追踪、APM 工具、上下文日志追踪、基于请求的全链路日志追踪等场景有非常重要的作用。

关于“Node如何实现异步资源上下文共享”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识,可以关注编程网VUE频道,小编每天都会为大家更新不同的知识点。

--结束END--

本文标题: Node如何实现异步资源上下文共享

本文链接: https://lsjlt.com/news/97935.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Node如何实现异步资源上下文共享
    这篇文章主要介绍“Node如何实现异步资源上下文共享”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Node如何实现异步资源上下文共享”文章能帮助大家解决问题。异步资...
    99+
    2024-04-02
  • 如何在文件资源管理器中共享文件Windows
    要在Windows文件资源管理器中共享文件,可以按照以下步骤进行操作:1. 打开"文件资源管理器",并导航到要共享的文件或文件夹。2...
    99+
    2023-09-13
    Windows
  • html5如何实现文件异步上传
    这篇文章主要为大家展示了“html5如何实现文件异步上传”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“html5如何实现文件异步上传”这篇文章吧。1 简介开发文...
    99+
    2024-04-02
  • Ajax如何实现异步上传文件
    这篇文章将为大家详细讲解有关Ajax如何实现异步上传文件,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。具体代码如下所示:<!DOCTYPE html>...
    99+
    2024-04-02
  • ubuntu如何实现文件共享
    本文小编为大家详细介绍“ubuntu如何实现文件共享”,内容详细,步骤清晰,细节处理妥当,希望这篇“ubuntu如何实现文件共享”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。ubuntu可以使用Smb协议实现文件...
    99+
    2023-07-04
  • Ubuntu下如何配置samba实现文件夹共享
    这篇文章的内容主要围绕Ubuntu下如何配置samba实现文件夹共享进行讲述,文章内容清晰易懂,条理清晰,非常适合新手学习,值得大家去阅读。感兴趣的朋友可以跟随小编一起阅读吧。希望大家通过这篇文章有所收获!Ubuntu下配置samba实现文...
    99+
    2023-06-28
  • JS中如何实现异步文件上传
    这篇文章将为大家详细讲解有关JS中如何实现异步文件上传,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。在非html5的情况下是无法用ajax把文件推送到后端的,只能通过fo...
    99+
    2024-04-02
  • html中如何实现异步上传文件
    这篇文章将为大家详细讲解有关html中如何实现异步上传文件,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。   代码如下:   <formaction="...
    99+
    2024-04-02
  • win7下利用iis搭建web服务器实现信息浏览资源共享
        web服务器主要功能是提供网上信息浏览服务,实现资源共享,同时还可以借助于局域网服务器访问页面可以有效的实现信息的同步,还可以随时随地将自己的信息上传到服务器端,那么要如 ...
    99+
    2023-06-05
    win7 iis web服务器 信息 服务器 web 浏览
  • Html5如何实现文件异步上传功能
    这篇文章主要介绍Html5如何实现文件异步上传功能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1 简介开发文件上传功能从来不是一件愉快的事,异步上传更是如此,使用过iframe和F...
    99+
    2024-04-02
  • Jquery如何实现跨域异步上传文件
    这篇文章主要为大家展示了“Jquery如何实现跨域异步上传文件”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Jquery如何实现跨域异步上传文件”这篇文章吧。先...
    99+
    2024-04-02
  • 如何使用Html5实现异步上传文件
    本篇内容主要讲解“如何使用Html5实现异步上传文件”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“如何使用Html5实现异步上传文件”吧! 服务器准备IIS ...
    99+
    2024-04-02
  • Ajax如何实现表单异步上传文件
    这篇文章主要介绍Ajax如何实现表单异步上传文件,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1.起因做前台页面时,需要调用WebAPI的Post请求,发送一些字段和文件(相当于把表...
    99+
    2024-04-02
  • JavaScript如何实现异步上传图片文件
    这篇文章将为大家详细讲解有关JavaScript如何实现异步上传图片文件,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。html:<form action=...
    99+
    2024-04-02
  • ajax异步如何实现文件分片上传
    这篇文章主要介绍ajax异步如何实现文件分片上传,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!实例代码:<!DOCTYPE html><html lang="en&qu...
    99+
    2023-06-08
  • 如何使用 Golang 实现异步文件上传?
    如何用 go 实现异步文件上传?使用 http.multipartfile 处理文件上传,它支持并发上传。创建一个 goroutine 来异步上传文件,不会阻塞主线程。使用 io.cop...
    99+
    2024-05-13
    golang 异步文件上传 git
  • node+multiparty如何实现文件上传
    这篇文章主要讲解了“node+multiparty如何实现文件上传”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“node+multiparty如何实现文件上...
    99+
    2024-04-02
  • Linux上如何用ad-hoc实现Wifi共享
    今天就跟大家聊聊有关Linux上如何用ad-hoc实现Wifi共享,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。最近在 Ubuntu 里找了很久,也找不到一个可以将无线网卡作 AP ...
    99+
    2023-06-16
  • 如何实现SAMBA文件共享服务
    今天小编给大家分享一下如何实现SAMBA文件共享服务的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。配置用户认证共享服务端操作...
    99+
    2023-06-27
  • jQuery中jQuery-form.js如何实现异步上传文件
    这篇文章将为大家详细讲解有关jQuery中jQuery-form.js如何实现异步上传文件,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、举个栗子1.先下载 JQuer...
    99+
    2024-04-02
软考高级职称资格查询
推荐阅读
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作