2016-05-25 11 views
1

に書き込まれたとき、これは少しあいまいかもしれませんが、私は原料の束をやった後、ファイルに小さなカウンターを書き込みノードのアプリがありますが原因でreadFileの対処方法ファイルが現在

Fs.readFile(Blender.LOG , function(error, data) { //read the log file 
    if(error) { 
     throw error; 
    } 

    counter = parseInt(data) + 1; //add this blend 

    if(!isNaN(counter)) { //check if the number is a number 
     Fs.writeFile(Blender.LOG, counter, function(error) { 
      if(error) { 
       throw error; 
      } 

      Blender.debugging('counter: added', 'report'); 
     }); 
    } 
    else { //throw error 
     Blender.log.error('    Counter number not valid ("' + counter + '"). Leaving it alone for now!'); 
    } 
}); 

をアプリケーションでの需要が多いのは、readFileのコールバックにisNaNがあります。これは、ファイルがすでに前のインスタンスのwriteFileからの書き込み用に開いているためです。

あなたはこの問題に対処する方法を

(しかしスローエラーがないことを私に興味深いものですか)?私は本当にアプリを速く保つためにこれをブロック書き込みにしたくないですが、私はおそらく書き込みをキューに入れたいと思いますか?私はすべてのために開いています。 :)あなたがimplementionファイルカウンターにしたいようmakesureは原子it'isため

おかげ

答えて

1

それは、見えます、あなたがこれを行う必要があります:あなたの場合

lock file 
read counter from file 
increment counter 
write counter to file 
unlock file 

は、利用FS-EXTモジュールを提案しますファイルをロックしたい

別の方法:カウンタを格納するためにredisを使用します。これはアトミックなインクリメントを持ち、ディスクに頻繁に書き込む必要がないため、パフォーマンスが向上します。

+0

ええ、私は赤ちゃんを調べていましたが、それはセキュリティで少し慎重です。はるかに速くなければならない時にのみディスクに書き込むインメモリシステム! – Dominik

関連する問題