node.js 读取动态文件

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

时间: 2024-10-12 21:21:44

node.js 读取动态文件的相关文章

Node.js入门:文件查找机制

文件查找流程图 从文件模块缓存中加载 尽管原生模块与文件模块的优先级不同,但是都不会优先于从文件模块的缓存中加载已经存在的模块. 从原生模块加载 原生模块的优先级仅次于文件模块缓存的优先级.require方法在解析文件名之后,优先检查模块是否在原生模块列表中.以http模块为例,尽管在目录下存在一个http/http.js/http.node/http.json文件,require("http")都不会从这些文件中加载,而是从原生模块中加载. 原生模块也有一个缓存区,同样也是优先从缓存

Node.js上传文件

var formidable = require('formidable'); var util = require('util'); exports.upload = function(req,res){ var form = new formidable.IncomingForm(); form.encoding = 'utf-8'; form.uploadDir = "E:/file/upload";//目录需要已存在 /** * fields 表单中的其他属性 * files

使用Node.JS监听文件夹变化

使用Node.JS监听文件夹改变有许多应用场合,比如: 构建自动编绎工具 当源文件改变时,自动运行build过程,比如当你写CoffeeScript文件或SASS CSS文件时,保存之后可即时生成对应的JS或CSS. 构建自动布署工具 通过侦听源文件夹的改变,你可以自动即时将改后的文件布署到测试服务器,加快你的开发测试速度. 这些工具其实都需要侦听文件夹的改变,基于Node.JS的侦听文件夹改变的模块有很多. fs.watch 其中Node.JS的文件系统也可侦听某个目录的改变, 如fs.wat

JS读取本地文件及目录的方法

Javascript是网页制作中离不开的脚本语言,依靠它,一个网页的内容才生动活泼.富有朝气.但也许你还没有发现并应用它的一些更高级 的功能吧?比如,对文件和文件夹进行读.写和删除,就象在VB.VC等高级语言中经常做的工作一样.怎么样,你是否需要了解这方面的知 识?那就请跟我来,本文将详细描述如何使用Javascript语言进行文件操作. 一.功能实现核心:FileSystemObject 对象 其实,要在Javascript中实现文件操作功能,主要就是依靠FileSystemobject对象.

node.js编译less文件

大多数文章对于到底怎样编译less文件并没有一个详细的说明,清一色的grunt命令,看得也是晕晕的,所以也就有了这篇手记的存在. 步入正题 1.安装配置好sublime text3(包括各种实用插件)和node.js后,新建一个文件夹,这里取名less_test,文件目录结构如下:其中node_modules文件夹是调用npm install命令的时候在当前目录下创建的安装模块.2.在test.less文件里面随意写些代码:3.打开命令行(cmd),进入less_test文件夹,输入npm in

Meteor node.js 复制(copy)文件的方法

以下三种方法中请注意加: var exec = Npm.require('child_process').exec; var fs =Npm.require('fs'); 1.  原文件在private目录下,用Meteor 的Assets读取内容,使用node.js的fs.writeFile()写入,这种方法只能适用文本文件 var copyFile=function(){ //检测目标文件是否存在 fs.open( FILE_STORE_AB_PATH+"/aapt",'r',fu

JS读取XML文件数据并以table显示数据(兼容IE火狐)

先看xml文件: <?xml version="1.0" standalone="yes"?> <student> <stuinfo> <stuName>张秋丽</stuName> <stuSex>女 </stuSex> <stuAge>18</stuAge> </stuinfo> <stuinfo> <stuName>李文

js 读取xml文件

读取xml文件 [原创 2007-6-20 17:35:37]  字号:大 中 小 js中读取xml文件,简单的例子: <html><head><script>var xmlDoc=new ActiveXObject("Microsoft.XMLDOM")xmlDoc.async="false"xmlDoc.load("b.xml")var nodes=xmlDoc.documentElement.childN

node.js 监听文件变化并打印

1 Use node.js library "chokidar"2 Detail code: var watcher = chokidar.watch("/home/camille/Downloads", { ignored: /[\/\]./, persistent: true }); var log = console.log.bind(console); watcher .on('add', function(path) { log('File', path,