IO包括 " 网络IO " 和 " 文件IO "
-
相比于CPU计算和内存读写,IO的突出特点就是 : 慢!
-
如果数据量过大,网络IO会有带宽的限制,服务端会有内存占用过多的问题
-
本文讲述如何在有限的硬件资源下提高IO的操作效率
解决方案 : stream
-
一图胜千言
/** 标准输入输出 * process.stdin 获取数据 * pipe 管道 * process.stdout 目的地 * / process.stdin.pipe(process.stdout)
-
对于一个POST请求,其req, res参数都具有stream的特性
-
比如我们希望接收到一点数据就返回一点数据,写法如下
const http = require('http'); const server = http.createServer((req, res) => { if (req.method === 'POST') { req.pipe(res) } }); server.listen(8000);
-
nodejs stream方式拷贝文件demo
var fs = require('fs'); var path = require('path'); // 两个文件名 var file_1 = path.resolve(__dirname, 'data.txt'); var file_2 = path.resolve(__dirname, 'data-bak.txt'); // 创建读取文件的stream对象 var readStream = fs.createReadStream(file_1); // 创建写入文件的stream对象 var writeStream = fs.createReadStream(file_2); // 通过pipe执行拷贝 readStream.pipe(writeStream); // 监听拷贝中 readStream.on('data', (chunk) => { console.log(chunk.toString()); }); // 监听拷贝完成 readStream.on('end', () => { console.log('copy end.'); });
-
nodejs stream方式读文件发送给前端demo
var fs = require('fs'); var path = require('path'); var http = require('http'); var server = http.createServer((req, res) => { var file_1 = path.resolve(__dirname, 'data.txt'), stream = fs.createReadStream(file_1); // 将res作为stream的pipe stream.pipe(res); }); server.listen(3000);