node梳理
node
Node.js 使用了事件驱动、非阻塞式 I/O 的模型
Node在处理高并发,I/O密集场景有明显的性能优势
高并发,是指在同一时间并发访问服务器
I/O密集指的是文件操作、网络操作、数据库,相对的有CPU密集,CPU密集指的是逻辑处理运算、压缩、解压、加密、解密

http
const http = require('http');
const server = http.createServer((req, res) => {
res.statusCode = 200; // 设置状态码
res.setHeader('Content-Type', 'text/plain'); // 设置响应头
res.end('Hello, World!\n'); // 结束响应
});
// 服务器监听端口
server.listen(3000, () => {
console.log('服务器正在运行在 http://localhost:3000/');
});
https
const https = require('https');
const fs = require('fs');
// 读取 SSL 证书
const options = {
key: fs.readFileSync('server-key.pem'), // 私钥
cert: fs.readFileSync('server-cert.pem') // 证书
};
const server = https.createServer(options, (req, res) => {
res.statusCode = 200;
res.setHeader('Content-Type', 'text/plain');
res.end('Hello, Secure World!\n');
});
// 服务器监听端口
server.listen(3000, () => {
console.log('HTTPS 服务器正在运行在 https://localhost:3000/');
});
stream
const fs = require('fs');
// 创建可读流和可写流
const readable = fs.createReadStream('source.txt');
const writable = fs.createWriteStream('destination.txt');
// 使用 pipe 方法将数据从可读流写入可写流
readable.pipe(writable);
// 监听事件
writable.on('finish', () => {
console.log('数据已成功复制到 destination.txt');
});
readable.on('error', (err) => {
console.error('读取错误:', err);
});
writable.on('error', (err) => {
console.error('写入错误:', err);
});
// readable.unpipe(writable);
EventEmitter 事件监听手写实现
class event {
constructor() {
this.listeners = {}
}
on(event, listener) {
// 开始监听
if (this.listeners[event] && this.listeners[event].length) {
} else {
this.listeners[event] = []
}
this.listeners[event].push(listener)
}
removeListener(event, listener) {
// 取消监听
if (this.listeners[event]) {
const index = this.listeners[event].indexOf(listener)
if (index !== -1) {
this.listeners[event].splice(index, -1)
}
}
}
removeAllListeners(event) {
this.listeners[event] = []
}
emit(event, params) {
// 触发实践
if (this.listeners[event]) {
this.listeners[event].forEach(listener => {
listener.apply(this, params)
});
}
}
once(event, listener) {
if (this.listeners[event]) { } else { this.listeners[event] = [] }
this.listeners.push(
()=>{
listener()
this.removeListener(event,listener)
}
)
}
}
const bus = new EventBus();
this指向 默认会指向 EventEmitter 示例 ,所以使用apply方法改变this指向listener.apply(this, params)
箭头函数 指向 声明时所在的上下文

浙公网安备 33010602011771号