Part5-1-1 Nodejs 基础

Posted 沿着路走到底

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Part5-1-1 Nodejs 基础相关的知识,希望对你有一定的参考价值。

Nodejs 架构

Natives modules

当前层内容由 JS 实现。

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

JS 语言无法直接操作底层硬件设置。需要通过桥梁:Builtin modules "胶水层" (由C++编写)。

底层

V8:执行 JS 代码,提供桥梁接口。

Libuv: 事件循环、事件队列、异步IO

第三方模块:zlib、http、c-ares等。

Reactor模式

单线程完成多线程工作

实现异步IO、事件驱动

可以实现高并发处理

Nodejs 更适用于 IO 密集型高并发请求

Nodejs异步IO

nodejs异步 IO 是 异步非阻塞 IO

立即返回的并不是业务层期望得到的数据,而仅仅是当前调用的状态,操作系统为了获取数据,就会让程序重复调用IO操作,判断 IO 是否结束,这种技术称为轮询。

常见轮询技术:read、select、poll、kqueue、event ports

期望实现无需主动判断的非阻塞 IO

 1

异步 IO 总结

IO 是异步程序的瓶颈所在

异步 IO 提高性能无须采用原地等待结果返回

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

Nodejs 单线程配合事件驱动架构及libuv实现了异步 IO

Nodejs 事件驱动架构

事件驱动架构是软件开发中的通用模式

事件驱动、发布订阅、观察者

主体发布消息,其他实例接收消息

const EventEmitter = require('events')

const myEvent = new EventEmitter()

myEvent.on('事件1', () => 
  console.log('事件1执行了')
)

myEvent.on('事件1', () => 
  console.log('事件1-2执行了')
)

myEvent.emit('事件1')

输出:

Nodejs单线程

使用 JS 实现高效可伸缩的高性能 Web 服务

单线程如何实现高并发?

异步非阻塞 IO 配合事件回调通知

Nodejs 主线程是单线程

libuv 库会维护一个线程池

 1

const http = require('http')

function sleepTime (time) 
  const sleep = Date.now() + time * 1000
  while(Date.now() < sleep) 
  return 

sleepTime(4)
const server = http.createServer((req, res) => 
  res.end('server starting......')
)

server.listen(8080, () => 
  console.log('服务启动了')
)

4秒后服务启动

Nodejs应用场景

IO 密集型高并发请求

Nodejs作为中间层

操作数据库提供 API 服务

实时聊天应用程序

Nodejs 更加适合 IO 密集型任务

Nodejs实现API服务

// 需求:希望有一个服务,可以依据请求的接口内容返回相应的数据
import express from 'express'
import  DataStore  from './data'

const app = express()

app.get('/', (req, res) => 
  // res.end('1122')
  res.json(DataStore.list)
)

app.listen(8081, () => 
  console.log('服务已经开启了')
)

Nodejs全局对象

与浏览器平台的 window 不完全相同

Nodejs 全局对象上挂载许多属性

全局对象是 javascript 中的特殊对象

Node.js 中全局对象是 global

Global 的根本作用就是作为宿主

全局对象可以看做是全局变量的宿主

默认情况 this 是空对象,和 global 并不是一样的

Nodejs 常见全局变量

__filename:返回正在执行脚本文件的绝对路径

__dirname:返回正在执行脚本所在目录

timer类函数:执行顺序与事件循环间的关系

process:提供与当前进程互动的接口

require:实现模块的加载

module、exports:处理模块的导出

1

以上是关于Part5-1-1 Nodejs 基础的主要内容,如果未能解决你的问题,请参考以下文章

nodeJS之HTTP

NodeJS学习笔记之Http模块

node面试题之---对比JS和NodeJS的区别

js高级---本地对象内置对象宿主对象

maven入门基础:创建nexus宿主仓库

NodeJS的概述