我有一个node.js服务器,它几乎运行子进程,并通过套接字将stdout从进程发送到连接的客户端。它工作正常,但是当客户端断开连接时,由于var超出了范围,我无法关闭子进程。这是我的示例代码
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)
在我的密切监听器中,我需要访问tail变量,以便我可以杀死进程。
答案 0 :(得分:4)
将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;
});
});