NodeJS,Multi-FileWatcher,Socket.IO以及与客户端的交互

时间:2011-12-16 09:46:59

标签: javascript node.js socket.io

我是NodeJS的新手,我想知道如何正确使用FSSocket.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');    
    });

感谢您的帮助!

0 个答案:

没有答案