node.js 读取动态文件

jopen 9年前

场景:

文件Server A,临时Server B,客户端 C。Server A 存有极大的文件,需要提供给多个客户端C下载。

为了节省Server A端的带宽和访问压力,做一个中间层即ServerB,Server B从Server A下载大文件到本地,为了节省时间和带宽,下载过程中,同时提供客户端来下载。

难点:

Server B从ServerA下载文件的同时要把正在保存中的文件提供给客户端下载,类似于提供给客户端断点续传的功能。

解决方案

老外写了一个工具,上面的难点迎刃而解。https://github.com/felixge/node-growing-file

引用growing-file,实现上面的场景:

1、 fileServer.js == > 文件Server


var http = require('http');  var fs = require('fs');    var path = 'BigFile.iso';  var server = http.createServer(function(req, res) {      var stream = fs.createReadStream(path); //读取流      stream.pipe(res); //读取流以pipe方式下发  });  server.listen(3000);

2、 tempServer.js == > 临时文件Sever,中间缓存层,提供多客户端下载



var http = require('http');  var fs = require('fs');  var sourceReadStream = fs.createWriteStream("BigFile.iso"); //写入流  var GrowingFile = require('growing-file'); //第三方模块,实时动态读取正在变动中的文件。  // from https://github.com/felixge/node-growing-file    //这里模拟从文件Server下载大文件(随着进程启动,下载大文件以Stream pipe方式保存至本地)。  http.get("http://127.0.0.1:3000", function(res) {      res.pipe(downloadFile);  });    //有client请求时,读取本地正在执行写操作的文件,实时下发数据。  var server = http.createServer(function(req, res) {      var file = GrowingFile.open('BigFile.iso'); //读取正在变动的文件(类似于断点续传)。      file.pipe(res); //pipe方式下发数据  });  server.listen(4000);

3、运行
node fileServer.js
node tempServer.js

浏览器访问: http: //127.0.0.1:4000。


来自:http://blog.csdn.net/shmnh/article/details/44128781