Node.js的研究和应用

news2024/11/17 9:29:52

首先我们要知道什么是node.js?

Node.js采用谷歌的V8引擎,是一个服务器端的、非阻断式I/O的、事件驱动的

JavaScript运行环境。

一、Node.js架构具体包含什么呢?咱们从一个图来看看会更加明白。

natives modules

1.当前层内容由js实现 。

2.提供应用程序可直接调用库,例如fs、path、http等 。

3.js语言无法直接操作底层硬件设置 。

builtin modules - 胶水层

调用具体的c++函数的作用

底层:

1.v8:执行js代码,提供桥梁接口

功能: (自己编写的js代码,内置的js代码、第三方的代码)

提供接口,js与c或者c++之间[[的转换功能

  1. libuv:事件循环、事件队列、异步IO
  2. 第三方模块:zlibhttpc-ares等。

二、node.js最大的特点是非阻塞式IO即异步IO,那么异步IO是什么呢?

从下面的图我们先来看看什么是异步和同步。

阻塞IO的判断条件是什么呢:操作系统重复调用IO操作,判断IO是否结束 (轮询)。通俗的说就是在一个进程完成后再执行另一个进程,还是同时执行两个进行的问题。常见轮询技术有read 、select、 poll、kqueue、event ports。当然我们期望的是非阻塞IO。

Libuv是一个跨平台的的基于事件驱动的异步io库。但是他提供的功能不仅仅是io,包括进程、线程、信号、定时器、进程间通信等。下面是来自官网对Libuv架构的介绍图。

目前异步IO的特点为:

1.IO是应用程序的瓶颈所在

2.异步IO提高性能无需原地等待结果返回

3.IO操作属于操作系统系统级别,平台都有对应实现

4.Node.js单线程配合事件驱动架构及libuv实现了异步IO

三、事件循环(event loop)

NodeJs 在一个事件驱动的模型中工作,涉及到一个事件多路分用器(Event Demultiplexer) 和一个事件队列(Event Queue)。所有的 I/O 请求最终会生成一个成功或失败的事件或其他的触发器,叫做事件(Event)。根据下面这些算法处理这些事件。

1.事件多路分用器接受 I/O 请求并且委托这些请求给适当的硬件。

2.一旦 I/O 请求处理了(例如:一个文件里里面的数据可以读取,从一个 socket 的数据可以读取等),事件多路 分用器为在一个需要处理的队列中的特定行为添加注册的回调处理器。这些回调被称为事件,事件添加的队列被称为事件队列

3.当在一个事件队列中有可以处理的事件的时候,会按接受它们的顺序循环执行,直到队列为空。

4.如果在事件队列中没有事件或者事件多路分用器没有即将发生的请求,程序会完成。否则,这个过程会从第一步开始继续。

协调整个机制的程序被称为事件循环(Event Loop

四、事件驱动架构

事件驱动架构是软件开发中的通用模式,他和发布订阅、观察者比较类似,他们的共同特点:主体发布消息,其它实例接受消息

nodejs为事件提供了一个专门的模块:lib/events.js。 events常用的方法有两个,分别是on和emit,on用来监听事件,emit用来触发事件。

五、Node.js应用场景

1.IO密集型高并发请求

2.操作数据库提供API服务

3.实时聊天应用程序

六、Node.js实现API服务的步骤是什么?

1. npm init -y 初始化项目 。

2. npm install -g typescript 全局安装typescript 。

3. tsc --init 生成tsconfig.json 配置文件 。

4. npm install -g ts-node 开发时运行ts文件。

5. 写需求代码 。

6. 引入express npm i express 类型npm i @types/express -D。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/375839.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

不使用implements关键字实现实现类(类似于mapper)

首先,说明一下功能需求,平时定义一个接口,就要使用implements关键字来实现接口。那么,当不使用此关键字的时候,是否也能使相关接口也能够绑定实现类呢? 答案是肯定的。 此篇文章的主要功能有两个&#xf…

知识类问答数据集资源对外开放:百万级百度知道、社区问答及六大领域级小规模语料概述

随着chatgpt的火热,中文知识类问答数据集由收到诸多关注,其作为高质量的QA数据,可以用于SFT阶段以及pretrain预训练阶段。 本文主要介绍目前开源可下载的两个较大规模的知识类数据集,包括147万百度知道知识类数据集、425万社区问…

IOS逆向前期环境准备笔记

ios系统由于效验问题,只能升级不能降级,需要特别注意, 刷系统可以在爱思上搞定; 越狱推荐使用u盘镜像及本地启动盘制作: 注意,要进去bios,关闭安全启动,不然直接失败: Checkra1n镜…

linux升级gcc版本详细教程

0.前言一般linux操作系统默认的gcc版本都比较低,例如centos7系统默认的gcc版本为4.8.5。gcc是从4.7版本开始支持C11的,4.8版本对C11新特性的编译支持还不够完善,因此如果需要更好的体验C11以及以上版本的新特性,需要升级gcc到一个…

九、Vben之可拖拽穿梭框和水印背景如何添加

近期在开发的过程中遇到了两个难题,一个是目前的穿梭框不支持产品的要求,不能够上下拖拽,二是vben没有水印的api,需要我们自己来开发。 一、可拖拽穿梭框 做成功的效果如下: 思路: 将table放入transfer的…

操作系统权限提升(十七)之绕过UAC提权-Windows令牌概述和令牌窃取攻击

系列文章 操作系统权限提升(十二)之绕过UAC提权-Windows UAC概述 操作系统权限提升(十三)之绕过UAC提权-MSF和CS绕过UAC提权 操作系统权限提升(十四)之绕过UAC提权-基于白名单AutoElevate绕过UAC提权 操作系统权限提升(十五)之绕过UAC提权-基于白名单DLL劫持绕过UAC提权 操作系…

android EditText设置后缀

有两种实现方案。 方案一:是自己写一个TextWatcher。 方案二:是重写TextView的getOffsetForPosition方法,返回一个计算好的offset。 我在工作时,使用的是方案一。在离职之后,我还是对这个问题耿耿于怀,所以…

git在工作中的正常使用

开发A和B功能后进行发版。。 一、拉取代码 git clone http://ntc.ntsvars.com:8090/lvweijie/test.git二、开发功能A任务 创建A任务本地分支 #创建A分支,并切换A分支 git checkout -b A三、开发A任务 四、提交A功能文件到本地分支 git add .五、添加提交A功能备…

Tina_Linux打包流程说明指南_new

OpenRemoved_Tina_Linux_打包流程_说明指南_new 1 概述 1.1 编写目的 介绍Allwinner 平台上打包流程。 1.2 适用范围 Allwinner 软件平台Tina v3.0 版本以上。 1.3 相关人员 适用Tina 平台的广大客户,想了解Tina 打包流程的开发人员。 2 固件打包简介 固件…

Jenkins+Gitlab实现代码自动构建部署

一、环境准备 主机名ip安装软件jenkins192.168.75.149jenkinsgitlab192.168.75.147gitlabweb192.168.75.155部署应用 二、jenkins服务器配置 1、生产公钥 [rootjenkins ~]# ssh-keygen (2)获取公钥信息 公钥信息在配置 Gitlab SSH Keys 时用到。 &am…

Tcpdump抓包验证zookeeper的心跳机制

一、背景 在分布式系统中,zookeeper可以作为服务注册中心,所有提供服务的节点都可以在zookeeper上面注册,并作为一个node被组织起来,如下图: 在RPC框架中,这些服务提供者就是RPC服务的提供者。zookeeper注…

【测试】Python手机自动化测试库uiautomator2和weditor的详细使用

1.说明 我们之前在电脑操作手机进行自动化测试,基本上都是通过Appium的,这个工具确实强大,搭配谷歌官方的UiAutomator基本上可以完成各种测试,但缺点也很明显,配置环境太麻烦了,需要jdk、sdk等&#xff0c…

利用较新版本的IDEA 2022.3.2 创建Java Web的maven项目

1.创建项目 正常三步走,没什么可说的 2.用模板创建项目(重要) 第一步,一定要选Jakarta EE。这个模板是基于JavaWeb的一个标准模板,如果选了maven中的JavaWeb模板,那就变成了web目录在根目录下,…

测试跟踪模块UX交互升级,多个X-Pack功能开放至开源版,MeterSphere开源持续测试平台v2.7.0发布

2023年2月24日,MeterSphere一站式开源持续测试平台正式发布v2.7.0版本。 在这一版本中,MeterSphere在测试跟踪模块进行了UX交互升级,整个页面采用轻量化设计进行整体降噪,页面信息更加清晰易懂,操作流程更顺畅&#x…

【学习笔记】深入理解JVM之类加载机制

【学习笔记】深入理解JVM之类加载机制 以后基本上都在语雀上面更新,大家有兴趣可以看看嗷! 首发地址: 知识库 文章流程图: 1、概述 首先我们先来看看一个 Class 文件所需要经过的一个流程图: 而我们今天要重点需讲的…

如何保护阿里云、政采云等云市场三方账号安全?

什么是云市场?根据百度百科释义,云市场是指物联网中分布在不同地点的海量的商品生产者和消费者之间各种经济关系的集合体,是通过相对集中的云平台资源联合物联网各个感知节点信息资源的方式,以运行分布在不同地点的海量的经济交换…

Java——数组

目录 前言 一、数组的定义 二、数组声明和创建 三、三种初始化及内存分析 Java内存分析 三种初始化 静态初始化 动态初始化 数组的默认初始化 数组的四个基本特点 四、下标越界及小结 五、数组的使用 For-Each循环 数组作方法入参 数组作返回值 六、二维数组 七…

项目管理工具dhtmlxGantt甘特图入门教程(十四):导出/导入 Excel到 iCal

这篇文章给大家讲解利用dhtmlxgantt导入/导出Excel到iCal的操作方法。 dhtmlxGantt是用于跨浏览器和跨平台应用程序的功能齐全的Gantt图表,可满足应用程序的所有需求,是完善的甘特图图表库 DhtmlxGantt正版试用下载(qun;765665…

中国跨境平台出海,产业带依然是最大优势

对外贸工厂来说,借助跨境电商服务平台开拓海外市场可行吗?2023年2月11日,在郑州荥阳举办的Starday线下招商会联合线上直播荥阳站上,这是很多现场参会的企业负责人面对大屏上的招商介绍宣传时,大脑飞速思考的问题。2023…

android kotlin 协程(六) 源码浅析

android kotlin 协程(六) 源码浅析 前言: kotlin协程源码十分庞大, 本篇只能吧我理解的源码聊一聊,不会特别深入研究,只会浅浅的看看表层. 本来计划协程系列是10篇左右,后续是flow热流冷流之类的, 冷流操作符之类的应该不会在写了, flow当作Rxjava来用就可以,后续可能还会写一…