2015-05-22 85 views
0

如何在term.js中打开多个终端?Open term.js终端

我用ssh2模块使用term.js。

例如,路线:

客户端 - >打开插座和connecto到Node.js的服务器 - > Node.js的服务器通过SSH2

连接第三方服务器,我可以一次打开只开1个终端。有没有一种合乎逻辑的方式来做到这一点

代码如:

server.js

io.of('/ssh').on('connection', function (socket) { 
    var conn = new ssh(); 
    conn.on('ready', function() { 
     conn.shell(function(err, stream) { 
      if(err) 
       return socket.emit('data', 'error'); 

      socket.on('data', function(data) { 
       if(stream) 
        stream.write(data.content); 
      }); 

      stream.on('data', function(data) { 
       socket.emit('data', data.toString('binary')); 
      }); 
     }); 
    }).connect({ 
     host: 'localhost', 
     username: 'user', 
     password: 'password' 
    }); 
}); 

client.js

socket = io.connect('http://localhost'); 
socket.on('connect', function() { 
    term = new Terminal({ 
     cols: 80, 
     rows: 20, 
     convertEol: true, 
     useStyle: true, 
     cursorBlink: false, 
     screenKeys: true 
    }); 

    term.on('data', function(data) { 
     socket.emit('data', data); 
    }); 

    term.open(document.getElementById('container')); 

    socket.on('data', function(data) { 
     term.write(data); 
    }); 

    socket.on('disconnect', function() { 
     term.destroy(); 
    }); 
}); 

如果有一个term.js标签的解决方法,我会很高兴了。

回答

0

我做了一个多终端工作,但对于系统SSH客户端,我认为你可以使用相同的技巧。

var io = require("socket.io").listen(82); 
var pty = require("pty.js"); 

io.sockets.on("connection", function(socket) { 
var buff = []; 

var term = pty.spawn("/usr/bin/ssh", ["[email protected]"], { 
    name: "xterm-256color", 
    cols: 120, 
    rows: 40, 
    cwd: process.env.HOME, 
    env: process.env 
}); 

term.on("data", function(data) { 
    return !socket ? buff.push(data) : socket.emit("data", data); 
}); 

while(buff.length) { 
    socket.emit("data", buff.shift()); 
} 

socket.on("data", function(data) { 
    term.write(data); 
}); 

socket.on("disconnect", function() { 
    socket = null; 
    term.kill(); 
}); 
});