这是我参与「第四届青训营 」笔记创作活动的第8天。
Node.js是一个基于V8 JavaScript引擎的JavaScript运行时环境。
Node.js的应用场景
前端工程化
· Bundle:Webpack
· Uglify:uglifyjs
· Transpile: babel
...
这些前端工程化都基于node运行环境。
Web服务端应用
优点:
- 学习曲线平缓,开发效率高
- 运行效率接近常见的编译语言
- 社区生态丰富及工具链成熟
- 与前端场景结合有优势(SSR)
Electron跨端桌面应用
商业应用: VScode,ZOOM
Node.js运行时结构
V8:JavaScript Runtime,诊断调试工具(inspector)
libuv: eventloop(事件循环),syscall(系统调用)
特点:
-
异步 I/O
当 Nodejs执行I/O操作时,会在响应返回后恢复操作,而不是阻塞线程并占用额外内存等待
-
单线程
实际: JS线程 + uv线程池 + V8 任务线程池 + V8 Inspector 线程
优点: 不用考虑多线程同步的问题,能够比较高效的利用系统资源
缺点: 阻塞会产生更多的负面影响
-
跨平台
编写一个简单的Http Server
- 创建服务器
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响应对象,包含我们要发送给客户端的信息
- 监听主机和端口号
Server通过listen方法来开启服务器,并且在某一个主机和端口上监听网络请求:
server.listen(8080, () => {
console.log("服务器在8080端口启动");
});
listen函数有三个参数:
-
主机host:通常可以传入localhost、ip地址127.0.0.1、或者ip地址0.0.0.0,默认是0.0.0.0
localhost:本质上是一个域名,通常情况下会被解析成127.0.0.1
-
端口port:可以不传,系统会默认分配端
-
回调函数:服务器启动成功时的回调函数