node.js 讀取動態文件

jopen 9年前發布 | 14K 次閱讀 Node.js Node.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。


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

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!