node.js读写数据流

node中有个流的概念,stream。代表数据流动方向:向内流(可读流),向外流(可写流)。常用的流形式是文件,和tcp套接字。流是以快为单位发送数据,通过监听‘data’事件,每一次得到一块数据即进行一次操作,当数据结束时,监听end事件,执行后续操作。

可读流可以通过stream.pause();stream.resume()暂停恢复流。其中暂停流在写文件时会停止从该文件中读取数据,如果是TCP套接字则不会读取新的数据包,终止其他终端来的数据包。可写流是要从node向外输出的数据,可以是TCP连接也可以是文件。node不会在io操作上阻塞,写入的缓冲区如果被刷新,会发射drain事件,如果没有被刷新,数据将被存储在进程内存中。

TCP连接是双向的,因此既是可读流也是可写流。以node作为服务器,则HTTP的请求是可读流,响应是可写流。

通常在服务器端读取本地数据是快速的,即可读流是快速的。然而由于网络原因,很多响应即可写流是无法保证的,如果请求太多(在服务器的读写范围内),而响应太慢,会导致服务器的可写流填满。此时需要避免慢客户端(前端响应慢)的情况。

fs = require('fs');
require('http').createServer(function (req,res) {
	var rs = fs.createReadStream('./1.txt');
	rs.on('data', function(data) {
		if(!res.write(data)){
			rs.pause();
		}
	});
	rs.on('drain', function(data) {
		rs.resume();
	});
	rs.on('end', function(){
		res.end();
	})
}).listen(8080,function(){
	console.log('正在监听...');
});

也可以使用stream.pipe();pipe接受可写流作为第一个参数,由传输源调用。

fs = require('fs');
require('http').createServer(function (req,res) {
	var rs = fs.createReadStream('./1.txt');
	rs.pipe(res);
}).listen(8080,function(){
	console.log('正在监听...');
});



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值