文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

react express怎么实现webssh demo解析

2023-07-05 21:43

关注

本篇内容介绍了“react express怎么实现webssh demo解析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

实现 WebSSH 的基本思路

WebSSH 可以分成以下几个模块:

实现 Demo 的代码

服务器端代码

服务器端代码使用 Node.js 和 WebSocket 模块实现,主要用于连接到远程 SSH 服务器并与前端建立 WebSocket 连接。

const SSHClient = require('ssh3').Client;const utf8 = require('utf8');export const createNewServer = (machineConfig: any, socket: any) => {  const ssh = new SSHClient();  const { host, username, password } = machineConfig;  // 连接成功  ssh.on('ready', function () {    socket.send('\r\n*** SSH CONNECTION SUCCESS ***\r\n');    ssh.shell(function (err: any, stream: any) {      // 出错      if (err) {        return socket.send('\r\n*** SSH SHELL ERROR: ' + err.message + ' ***\r\n');      }      // 前端发送消息      socket.on('message', function (data: any) {        stream.write(data);      });      // 通过sh发送消息给前端      stream.on('data', function (d: any) {        socket.send(utf8.decode(d.toString('binary')));        // 关闭连接      }).on('close', function () {        ssh.end();      });    })    // 关闭连接  }).on('close', function () {    socket.send('\r\n*** SSH CONNECTION CLOSED ***\r\n');    // 连接错误  }).on('error', function (err: any) {    socket.send('\r\n*** SSH CONNECTION ERROR: ' + err.message + ' ***\r\n');    // 连接  }).connect({    port: 22,    host,    username,    password  });}

前端代码

前端代码主要包括一个包装 xterm.js 的 React 组件和一些 WebSockets 相关的代码。

import React, { useEffect, useRef } from 'react';import { Terminal } from 'xterm';import { WebLinksAddon } from 'xterm-addon-web-links';import { FitAddon } from 'xterm-addon-fit';import 'xterm/css/xterm.css';const FontSize = 14;const Col = 80;const WebTerminal = () => {  const webTerminal = useRef(null);  const ws = useRef(null);  useEffect(() => {    // 初始化终端    const ele = document.getElementById('terminal');    if (ele && !webTerminal.current) {      const height = ele.clientHeight;      // 初始化      const terminal = new Terminal({        cursorBlink: true,        cols: Col,        rows: Math.ceil(height / FontSize),      });      // 辅助      const fitAddon = new FitAddon();      terminal.loadAddon(new WebLinksAddon());      terminal.loadAddon(fitAddon);      terminal.open(ele);      terminal.write('Hello from \x1B[1;3;31mxterm.js\x1B[0m $ ');      fitAddon.fit();      webTerminal.current = terminal;    }    // 初始化ws连接    if (ws.current) ws.current.close();    const socket = new WebSocket('ws://localhost:3001');    socket.onopen = () => {      socket.send('connect success');    };    ws.current = socket;  }, []);  useEffect(() => {    // 新增监听事件    const terminal = webTerminal.current;    const socket = ws.current;    if (terminal && socket) {      // 监听      terminal.onKey(e => {        const { key } = e;        socket.send(key);      });      // ws监听      socket.onmessage = e => {        console.log(e);        if (typeof e.data === 'string') {          terminal.write(e.data);        } else {          console.error('格式错误');        }      };    }  }, []);  return <div id="terminal"  style={{ backgroundColor: '#000', width: '100vw', height: '100vh' }}/>;};export default WebTerminal;

WebSSH 组件借助 Hooks 特性进行 WebSocket 和 xterm.js 的初始化。具体来说,这个组件使用了 useEffect Hook 在组件挂载时完成以下工作:

在 React 应用中使用 WebSSH 组件

你需要在你的 React的index.js 文件中引入 WebSSH 组件,并在你的应用中渲染它:

import WebSSH from './components/WebSSH';import React from 'react';import ReactDOM from 'react-dom';ReactDOM.render(  <WebSSH />,  document.getElementById('root'));

效果

react express怎么实现webssh demo解析

“react express怎么实现webssh demo解析”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯