跳到主要内容
CNode

请教一下如何用nodejs实现一定时间的文件监控

问答
Rringls发布于 11 年前
030000

应用场景是这样的,我需要在30S内监控某个文件是否存在,如果超过30S这个文件还不出现的话就要结束文件监控,继续下一步操作。 一开始我是这样写的:

        //监控响应文件

        fs.watchFile('d:/out_recv/' + guid + ".rsp", function (curr, prev) {
		
            if (curr.mtime.getTime() !== prev.mtime.getTime()) {
			
                isrsp = true;
				
                fs.unwatchFile('d:/out_recv/' + guid + ".rsp");
				
                response.writeHead(200, { "Content-Type": "text/json" });
				
                fs.readFile('d:/out_recv/' + guid + ".rsp", "utf-8", function (err, data) {
				
                    if (!err) {
					
                        response.write(data);
						
                        response.end();
						
                    }
                    else {
					
                        response.write("fail:" + err);
						
                        response.end();
						
                    }
                    //删除响应文件
                    fs.unlink('d:/out_recv/' + guid + ".rsp", function (err) {
					
                        if (!err)
						
                            console.log('删除响应文件: ' + guid + ".rsq");
							
                        else
						
                            console.log('删除响应文件出错: ' + err);
							
                    });
					
                });
				
            }
			
        });
		
        //创建计时器,30S后停止监控响应文件
		
        setTimeout(function () {
		
            if (!isrsp) {
			
                fs.unwatchFile('d:/out_recv/' + guid + ".rsp");
				
                response.writeHead(200, { "Content-Type": "text/plan" });
				
                response.write("fail:no response json file");
				
                response.end();
				
            }
			
        }, 30000);
		
但是速度不够快,文件大概1S左右就出现了,但是相应处理大概要4S。

后面我改成这个样子,结果似乎并没有循环直接就退出了。

function watchResponseFile(filePath, num, response) {

if (num < 10) {

    fs.exists(filePath, function (exists) {
	
        if (exists) {
		
            fs.readFile(filePath, "utf-8", function (err, data) {
			
                if (!err) {
				
                    response.writeHead(200, { "Content-Type": "text/json" });
					
                    response.write(data);
					
                    response.end();
					
                }
				
                else {
				
                    response.writeHead(200, { "Content-Type": "text/json" });
					
                    response.write("fail:" + err);
					
                    response.end();
					
                }
				
                //删除响应文件
				
                fs.unlink(filePath, function (err) {
				
                });
				
            });
			
        }
		
        else {
		
            num = num + 1;
			
            setTimeout(watchResponseFile(filePath, num, response), 10000);
			
        }
		
    });
	
}

else {

    response.writeHead(200, { "Content-Type": "text/json" });
	
    response.write("fail:no response json file");
	
    response.end();
	
}

}

请问到底要怎么写才能又快又好?
查看回复

回复 (0)

暂无回复,成为第一个参与讨论的人。

参与回复

登录后即可参与回复。登录