2

我目前有一个客户端连接事件,它在触发时会开始观看文件。当第二个客户端连接时,会再次监视相同的文件。(fs.watchFile()被使用)

在客户端断开连接事件中,文件未被监视。(fs.unwatchFile()使用)因此,如果第一个客户端断开连接,则第二个客户端也不会监视该文件。

我该如何解决这个问题?我尝试使用 and 的侦听器功能,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]);

作为一般规则,如果您发现自己想要一堆名称相似的变量,每个实例都有一个变量,那么您真正想要的是像数组或对象这样的数据结构。

于 2012-10-01T03:24:42.090 回答