簡體   English   中英

如何讀取不完整的文件並在Node.js中等待新數據

[英]how to read an incomplete file and wait for new data in nodejs

我有一個UDP客戶端,它可以從其他來源獲取一些數據並將其寫入服務器上的文件中。 由於這是大量數據,因此我不希望最終用戶等到它們完全寫入服務器后才能下載。 因此,我制作了一個NodeJS服務器,該服務器從文件中獲取最新數據並將其發送給用戶。

這是代碼:

var stream = fs.readFileSync(filename)
    .on("data", function(data) {

         response.write(data)

    });

這里的問題是,如果下載僅在文件僅為10mb時才開始。fs.readFileSync最多只能讀取10mb的文件。 即使2分鍾后,文件也增加到100mb。 fs.readFileSync永遠不會知道新的更新數據。 如何在Node中執行此操作? 我想以某種方式刷新fs狀態,或者也許perpaps使用fs文件系統等待新數據。 還是有某種fs fileContent監視程序?

編輯:

我認為下面的代碼可以更好地描述我想要實現的目標,但是在此代碼中,它會永遠讀取,並且我沒有fs.read中的任何變量可以幫助我停止它:

fs.open(filename, 'r', function(err, fd) {
    var bufferSize=1000,
    chunkSize=512,
    buffer=new Buffer(bufferSize),
    bytesRead = 0;


    while(true){ //check if file has new content inside

        fs.read(fd, buffer, 0, chunkSize, bytesRead);
        bytesRead+= buffer.length;
    }

});

Node在fs模塊中具有內置方法。 它被標記為不穩定,因此將來可能會更改。

它叫: fs.watchFile(filename[, options], listener)

您可以在此處了解更多信息: https : //nodejs.org/api/fs.html#fs_fs_watchfile_filename_options_listener

但是我強烈建議您使用像watchr這樣主動維護的良好模塊之一

從他的自述文件:

更好地監視Node.js的文件系統。 提供標准化的API,不同節點版本的文件監視API,嵌套/遞歸文件和目錄監視以及文件/目錄更改,刪除和創建的准確詳細事件。

模塊頁面在這里: https : //github.com/bevry/watchr

(曾在幾個proyects中使用該模塊,並且運行良好,與其他方式無關)

您需要在某些數據庫中存儲文件的最后大小。 首先讀取文件大小。 加載文件。 然后編寫腳本以檢查文件是否已更改。 您可以使用jquery.post咨詢尺寸以獲取結果並確定是否需要在javascript中重新加載

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM