2

現在、クライアント接続イベントがあります。これは、起動するとファイルの監視を開始します。2番目のクライアントが接続すると、同じファイルが再度監視されます。(fs.watchFile()使用)

クライアント切断イベントでは、ファイルは監視されません。(fs.unwatchFile()使用)したがって、最初のクライアントが切断された場合、ファイルは2番目のクライアントに対しても監視されません。

これを回避するにはどうすればよいですか?のリスナー関数を使用してみましたfs.watchfilefs.unwatchFile()、クライアント接続で各リスナーに異なる名前を付ける方法がわかりません。

私の知る限り、リスナーの作成は次のような変数を割り当てることによって行われます。

var listener1 = function (curr, prev) {
  console.log('touched 1');
});

次に、リスナーを監視または非監視にすることができます。

fs.watchfile('data.log', listener1);
fs.unwatchFile('data.log', listener1);

クライアントが接続するたびにそのリスナーに一意の名前を付けるにはどうすればよいですか?では、ファイルではなくリスナーでファイルの監視を解除できますか?

4

1 に答える 1

1

クライアントを識別するために使用しているものをキーとするオブジェクトを作成します。その値は個々のリスナーです。

var listeners = {};
...
// When client connects
listeners[clientId] = function(curr, prev) {
...
};
fs.watchfile('data.log', listeners[clientId]);
...
// When client disconnects
fs.unwatchfile('data.log', listeners[clientId]);

原則として、同じような名前の変数がインスタンスごとに1つずつ必要な場合、本当に必要なのは配列やオブジェクトなどのデータ構造です。

于 2012-10-01T03:24:42.090 に答える