node.js 读取动态文件

页面导航:首页 > 网络编程 > JavaScript > node.js 读取动态文件

node.js 读取动态文件

来源: 作者: 时间:2016-02-02 09:59 【

今天有人问ndoe js如何下载正在写入中的文件的数据。场景:文件Server A,临时Server B,客户端 C。Server A 存有极大的文件,需要提供给多个客户端C下载。为了节省Server A端的带宽和访问压

今天有人问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。


Tags:

文章评论

最 近 更 新
热 点 排 行
Js与CSS工具
代码转换工具

<