js 调用http接口_node.js技术架构

目录

e89bae7f09888729744c4d1f8581fe3d.png

node.js版本特点

双数是稳定版,单数是非稳定版

node.js的含义

node.js不是web框架,不能和Flask、Spring对比;node.js不是编程语言,不能和python、PHP作比较;node.js是一个技术平台,它将多个技术组合起来,让JavaScript能调用技术接口、后端应用。

node.js架构图:如下,纠错:steam模块拼写不对,应该是stream模块,流文件格式

984beec8f6efb76a9db17bb64e1d3694.png

bingdings

为什么需要bingdings?

C/C++实现了一个 http_parser库,很高效。但是,开发者只会写JS,也想用这个库。显然,直接用肯定是不行的,因此,需要一个桥梁。这个桥梁就是bingding,由于node.js提供了很多个bingding,因此,后面加一个“s”。

bingdings的工作过程?

  1. node.js用C++对http_parser进行封装,它符合某些要求,封装后的文件叫做http_parse_bingdings.cpp
  2. 用node.js提供的编译工具将文件编译成.node文件
  3. JS代码可以直接require这个.node文件,这样就可以调用C++库了

libuv

node.js之父想做一个跨平台的异步I/O库,libuv由此诞生。每个操作系统都有不同的库,譬如window系统有IOCP库、Linux系统有epoll库、FreeBSD系统的kqueue库,libuv会根据系统自动选择合适的方案。

libuv的功能:用于TCP/UDP/DNS/文件等的异步操作

V8

功能

  1. 将JS源代码变成本地代码,并且执行
  2. 维护调用栈,确保JS函数的调用顺序
  3. 内存管理,为所有的对象分配内存
  4. 垃圾回收,重复利用无用的内存
  5. 实现JS的标准库

注意项

  1. V8不提供DOM API,DOM API是由浏览器提供的
  2. V8执行JS是单线程的,但是V8可以开启两个线程,分别执行JS,这两个线程毫无联系
  3. V8本身是包含多个线程的,例如垃圾回收是单独的线程
  4. V8本身自带了event loop,但是node.js没有用V8的event loop,而是基于libuv自己做一个

event loop

event

比如计时器过期了、文件可以读取了、文件读取出问题了、scoket(http请求里面的内容)有内容、或者关闭了。

loop

翻译为中文就是“循环”,由于计算机处理事件是分优先级的,node.js需要按照顺序轮询每个事件,这种方式往往是循环的。

event loop

操作系统触发事件,JS可以处理事件,而event loop的作用就是决定JS处理这些事件的顺序。

event loop处理顺序的示意图:

8051071afe6092ee480077d6ab276ae3.png

重要阶段:

  • timer:检查计时器
  • poll:轮询,检查系统事件
  • check:检查setImmediate回调

大部分时间,node.js都会停留在poll轮询阶段,大部分事件都会在poll阶段被处理,如文件、网络请求等等。

node.js整体工作流程图如下:

1ab84dd1567ebfe7c268a30a71a24154.png

node.js提供的API:白色字体为不重要,黄色字体为需要重点关注

72d25c694a3ea95d0171decbe2b0b5a0.png
DevDocs​devdocs.io
ab808690fb08b21f28a6df5e7e5b6c3f.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值