2

を使用して非ブロッキングtcpサーバーを作成しましnode.jsた。これserverはポートをリッスンし、リクエストを他のサーバーに再ルーティングします。http.request()

メッセージのバックログを再ルーティングするには、日付をファイル名としてファイル内のすべてのメッセージ(1行の情報)を追加します。

サーバーは、小さなtxt文字列(800バイト)を使用して交互に複数のデバイスにアクセスされます。ファイルシステムへの書き込みは、暗黙的にブロッキングイベントを要求します。この動作を防ぐ方法はありますか?

4

3 に答える 3

3

appendFileが正しく機能しない場合は、複数のクラスターで機能し、出力を壊さないファイルストリームを使用して、このソリューションを自分でテストしました。

于 2012-06-26T19:46:53.170 に答える
1

fsのようなモジュールの非同期メソッドを使用するだけappendFileです。

http://nodejs.org/api/fs.html#fs_fs_appendfile_filename_data_encoding_utf8_callback

于 2012-06-26T19:22:08.987 に答える
0

このようなものが役立つかもしれません。

    var fs = require('fs');
    var writer = {
      files: {},
      appendFile: function(path, data) {
        if(this.files[path] === undefined) {
          this.files[path] = {open: false, queue: []};
        }
        this.files[path].queue.push(data);
        if(!this.files[path].open) {
          this.files[path].open = true;
          this.nextWrite(path);
        }
      },
      nextWrite: function(path) {
        var data = this.files[path].queue.shift(),
            self = this;
        if(data === undefined)
          return this.files[path].open = false;
        fs.appendFile(path, data, function(err) {
          if (err) throw err;
          self.nextWrite(path);
        });
      }
    }

fs.appendFileにはバージョン0.8.0のノードが必要ですが、ファイルごとにキューを保持し、追加された順序で追加します。動作しますが、あまり時間をかけませんでした。教育目的でのみ使用してください。

   writer.appendFile('test.txt','hello');
于 2012-06-26T23:14:41.243 に答える