node.js sream II
2016-05-12 16:03
549 查看
当从一个进程读取数据,然后写入另一个进程,如果读取太快写入太慢,读取的数据就要缓存,最糟糕的情况就是整个缓存区被占满
因为node.js不会阻塞,需要手动同步读操作和写操作
可以用可写流中的pipe实现上面功能
readable.pipe(destination[, options])
destination:可写流
options
end:是否在可读流结束时,也结束可写流,默认为true
var http = require('http'); var fs = require('fs'); console.log('http server listen on 3000'); http.createServer((req, res) => { var rs = fs.createReadStream('./test'); rs.on('data', (data) => { res.write(data); }); rs.on('end', function () { res.end(); }); }).listen(3000);
因为node.js不会阻塞,需要手动同步读操作和写操作
//生产者大于消费者,就会缓存数据 var http = require('http'); var fs = require('fs'); console.log('http server listen on 3000'); http.createServer((req, res) => { var rs = fs.createReadStream('./test'); //如果网络流太慢则暂停读文件流,避免数据填满缓存区 rs.on('data', (data) => { if (!res.write(data)) { rs.pause(); } }); //如果流刷新了缓冲区,会发送drain事件,此时恢复读文件数据流 res.on('drain', function () { rs.resume(); }); //读文件流结束,网络流也结束 rs.on('end', function () { res.end(); }); }).listen(3000);
可以用可写流中的pipe实现上面功能
readable.pipe(destination[, options])
destination:可写流
options
end:是否在可读流结束时,也结束可写流,默认为true
//可用pipe集成可读流和可写流的同步功能 var http = require('http'); var fs = require('fs'); http.createServer((req, res) => { var rs = fs.createReadStream('./test'); //{end:false}避免rs结束时在可写流调用 rs.pipe(res,{end:false}); rs.on('end',function () { res.write("ALl is over"); res.end(); }); }).listen(3000);
相关文章推荐
- 使用 HTTP 上传 G 级的文件之 Node.js 版本
- mongo实现消息队列
- Node.js压缩web项目中的js,css和图片
- Java IO与NIO的一些文件拷贝测试
- node连接mysql数据库
- async.js 学习记录
- 异步流程控制:7 行代码学会 co 模块
- 新时代编辑神器:Atom
- 页面缓存:内存和文件之间的那些事
- 浅析SQL Server中的执行计划缓存(上)
- Enterprise Library for .NET Framework 2.0缓存使用实例
- PowerShell中编程清空IE缓存方法
- PowerShell中使用.NET将程序集加入全局程序集缓存
- Stream、WshShell、WshUrlShortcut对象及Shell.Application的参数与使用
- C#中缓存的基本用法总结
- node.js中的fs.mkdir方法使用说明
- 为什么Node.js会这么火呢?Node.js流行的原因
- 究竟什么是Node.js?Node.js有什么好处?
- Linux下为Node.js程序配置MySQL或Oracle数据库的方法
- 三种Node.js写文件的方式