今天有人问ndoe.js如何下载正在写入中文件的数据。

场景:

文件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。
你可能感兴趣的内容
Node.js 文件系统 收藏,2476 浏览
0条评论

dexcoder

这家伙太懒了 <( ̄ ﹌  ̄)>
Owner