Node.js:在客户端连接上创建增量监视文件侦听器并分别删除它们



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

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

我该如何解决此问题?我尝试使用 fs.watchfilefs.unwatchFile() 的侦听器功能,但我不知道如何在客户端连接上以不同的方式命名每个侦听器。

据我所知,创建侦听器是通过分配这样的变量来完成的:

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

然后,可以监视或不监视侦听器:

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

如何在每次客户端连接时唯一命名该侦听器?那么我可以按侦听器而不是按文件取消监视文件吗?

创建一个对象,由您用于标识客户端的任何内容进行键控,其值是单个侦听器:

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]);

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

最新更新