NodeJs | 青训营笔记

116 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的第8天。

Node.js是一个基于V8 JavaScript引擎的JavaScript运行时环境。

Node.js的应用场景

前端工程化

· Bundle:Webpack

· Uglify:uglifyjs

· Transpile: babel

...

这些前端工程化都基于node运行环境。

Web服务端应用

优点:

  1. 学习曲线平缓,开发效率高
  2. 运行效率接近常见的编译语言
  3. 社区生态丰富及工具链成熟
  4. 与前端场景结合有优势(SSR)

Electron跨端桌面应用

商业应用: VScode,ZOOM

Node.js运行时结构

image.png

V8:JavaScript Runtime,诊断调试工具(inspector)

libuv: eventloop(事件循环),syscall(系统调用)

特点:

  1. 异步 I/O

    当 Nodejs执行I/O操作时,会在响应返回后恢复操作,而不是阻塞线程并占用额外内存等待

image.png

  1. 单线程

    实际: JS线程 + uv线程池 + V8 任务线程池 + V8 Inspector 线程

    优点: 不用考虑多线程同步的问题,能够比较高效的利用系统资源

    缺点: 阻塞会产生更多的负面影响

  2. 跨平台

编写一个简单的Http Server

  1. 创建服务器
    const http = require('http'); //引入内置的http模块
    
    const server = http.createServer((req, res) => {
        res.end("hello world");
    }); //创建 http server 对象

http.createServer 会返回 server 的对象

创建 Server 时会传入一个回调函数,这个回调函数在被调用时会传入两个参数:

req:request请求对象,包含请求相关的信息

res:response响应对象,包含我们要发送给客户端的信息

  1. 监听主机和端口号

Server通过listen方法来开启服务器,并且在某一个主机和端口上监听网络请求:

    server.listen(8080, () => {
        console.log("服务器在8080端口启动");
    });

listen函数有三个参数:

  1. 主机host:通常可以传入localhost、ip地址127.0.0.1、或者ip地址0.0.0.0,默认是0.0.0.0

    localhost:本质上是一个域名,通常情况下会被解析成127.0.0.1

  2. 端口port:可以不传,系统会默认分配端

  3. 回调函数:服务器启动成功时的回调函数