代码之家  ›  专栏  ›  技术社区  ›  Mike

Node.js连接会话

  •  0
  • Mike  · 技术社区  · 14 年前

    我有一个node.js服务器,它几乎运行一个子进程,并通过套接字将进程中的stdout发送给连接的客户端。它工作得很好,但是当客户端断开连接时,由于变量不在作用域内,我无法关闭childprocess。这是我的示例代码

    var sys = require('sys'),
            ws = require('./ws');
    
    
    
    var server = ws.createServer(function (socket) {
            socket.addListener("connect", function (resource) {
                    var counter = 0;
    
                    sys.puts("client connected from " + resource);
    
                    var spawn = require('child_process').spawn, tail = spawn('app');
                    sys.puts("Spawned child pid: "+ tail.pid);
    
                    tail.stdout.addListener('data', function(data) {
                         socket.write(JSON.stringify(data));
                    });
    
            })
    
            socket.addListener("close", function () {
                    //
                    // need to access the tail var here!!!
                    //
    
    
                    sys.puts("quit");
            })
    })
    
    server.listen(3656)
    

    在我的close监听器中,我需要访问tail变量,以便可以终止进程。

    1 回复  |  直到 14 年前
        1
  •  4
  •   Andris    14 年前

    移动 tail 声明一级以上,从 onConnect createServer ,因为它仍然是同一个实例:

    ws.createServer(function(socket){
        var tail;
        socket.addListener("connect", function(resource){
            tail = spawn("app");
            ...
        });
        socket.addListener("close", function(){
            if(tail)
                tail = null;
        });
    });