我是NodeJS的新手,我想知道如何正确使用FS和Socket.IO发送多个文件的内容。
我的问题更多是关于Node / javascript上的最佳实践,而不是我脚本的实际“原始”逻辑。
因此,我的应用程序的目的是观察日志文件(File1.log)和结果文件(File2.log)。 在File2.log包含字符串(例如“Done”或“Error”)之前,我需要继续将File1.log的结果发送到客户端。
当读取密钥(“错误”,“完成”)时,我将结果发送到客户端,并且必须为另外几个日志/结果文件启动相同的进程 - 在第一次关闭FileWatcher之后之一。
最后,我需要关闭连接并停止所有正在休眠的FileWatcher进程。
我的文件的'流媒体'工作得很好,但我对在不同的FileWatch进程之间切换以及如何通知客户端的最佳方法感到困惑。
Server.JS
/*
* [SomeCode]...
*/
io.sockets.on('connection', function (client) {
//Starting the process for the first couple of files
client.on('logA', function (res) {
var PATH_to_A = "path/to/A/directory/";
readFile(client,PATH_to_A);
});
//Starting the process for the seconde couple of files
client.on('logB', function (res) {
//I need to stop the first readFile Watcher process
var PATH_to_B = "path/to/B/directory/";
readFile(client,PATH_to_B);
});
});
function readFile(client,PATH){
var File1 = path.join(PATH,'File1.log');
var File2 = path.join(PATH,'File2.log');
//Get the file stats
fs.stat(File1,function(err,stats){
if (err) throw err;
//Send the data;
});
//Watch the first file
var w1 = fs.watch(File1,function(status, file){
if(status == "change"){
fs.stat(File1,function(err,stats){
if (err) throw err;
//Send the data;
});
}
});
//Watch the second file
var w2 = fs.watch(File2,function(status, file){
if(status == "change"){
fs.readFile(File2, "utf8", function (err, body) {
if (err) throw err;
//Some Code....
client.emit('done',body);
});
}
});
//Closing FileWatcher
client.on('ack',function(){
w1.close();
w2.close();
});
}
Client.JS
var socket = io.connect('http://127.0.0.1:8000');
//On connect, waiting for the first couple of files
socket.on('connect', function(server) {
socket.emit('init',data);
socket.emit('logA');
});
//If the first process is done, i ask for the second couple of files
socket.on('done',function(message){
socket.emit('ack');
socket.emit('logB');
});
感谢您的帮助!