如何在term.js中打开多个终端?
我正在使用带有ssh2模块的term.js。
例如方案:
客户 - >打开socket并连接到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 :(得分: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", ["root@localhost"], {
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();
});
});