2010-11-04 110 views
0

我有一个node.js服务器,它几乎运行子进程,并通过套接字将进程的stdout发送到连接的客户端。它工作得很好,但是当客户端断开连接时,由于var超出范围,我无法关闭子进程。下面是我的示例代码Node.js连接会话

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) 

在我身边的听众,我需要访问的尾巴变量,所以我可以杀死进程。

回答

4

移动tail声明一个级别,从onConnectcreateServer,因为它仍然是相同的实例:

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

谢谢!我尝试过,之前没有工作,所以我必须做出错误的事情 – Mike 2010-11-04 13:38:01