vue中websocket结合xterm.js实现实时日志监控

实现的效果

在这里插入图片描述

安装xterm.js

npm install --save xterm

官网xterm.js,我项目中安装的是4.19的版本

简单使用

import {
    Terminal } from 'xterm4';
import 'xterm4/css/xterm.css';
import 'xterm4/lib/xterm.js';
const term = new Terminal()

term.open(document.getElementById('xterm'))

new Terminal(options) 可以传递一个配置项,对终端的样式和功能进行一个初始化的设定

配置项options

cols?: number; // 列数
rows?: number; // 行数
cursorBlink?: boolean;// 光标是否闪烁
cursorStyle?: 'block' | 'underline' | 'bar'; // 光标的样式
cursorWidth?: number;// cursorStyle 为 ’bar‘ 设置光标的宽度
disableStdin?: boolean;// 是否禁用输入
theme?: {
     // 主题
    cursor?: string; // 光标颜色
    cursorAccent?: string; // 光标的强调色
    foreground?: string; // 默认的前景色,即字体颜色
    background?: string; // 默认的背景色
    selection?: string; // 选择的背景色(可以是透明的)
    selectionForeground?: String; //选择的字体颜色
};

以上是项目中用到的配置项,更多请查阅官网的声明文件xterm.d.ts中查看interface ITerminalOptions和interface ITheme

实例属性

readonly element: HTMLElement | undefined; // 包含终端的元素
readonly textarea: HTMLTextAreaElement | undefined;
readonly rows: number; // 行数
readonly rows: number; // 列数
readonly buffer: IBufferNamespace; // 终端缓冲区的内容,如果要操作终端中的内容这个,了解这个属性很有必要

更多请查阅官网的声明文件xterm.d.ts中查看

内置函数 APIS

    open(HTMLElement): void; // Terminal基于传入的 dom 元素进行初始化
    dispose(): void; // Terminal销毁,同时也会销毁 dom 元素以及事件
    reset(): void; // Terminal  reset (没用过)
 
    getOption(key: string): any; // 获取配置
    setOption(key: string, value: any): void; // 动态设置配置
 
    focus(): void; // Terminal聚焦
    blur(): void; // Terminal失焦
    resize(columns: number, rows: number): void; // 可以动态设置行数和列数
 
    write(data: string | Uint8Array, callback?: () => void): void; // xterm终端写入
    writeln(data: string | Uint8Array, callback?: () => void): void;// (没用过)
    writeUtf8(data: Uint8Array, callback?: () => void): void;// (没用过)
    clear(): void; // 清空光标所在行上面的所有输入内容,不包含删除当前光标所在行
 
    select(column: number, row: number, length: number): void; // 选择第row + 1 行的 第 column + 1 列开始,直到后面的第 length 个字符
    
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 Vue 使用 xterm.jsWebSocket 实现终端,你需要将用户输入的命令发送给后端,然后将后端返回的结果输出到 xterm.js 终端。以下是一个简单的示例: ```html <template> <div id="terminal"></div> </template> <script> import { Terminal } from 'xterm'; import { FitAddon } from 'xterm-addon-fit'; export default { data() { return { socket: null, // WebSocket 实例 term: null, // Terminal 实例 }; }, mounted() { // 创建 WebSocket 实例 this.socket = new WebSocket('ws://localhost:8080'); // 创建 Terminal 实例 this.term = new Terminal(); const fitAddon = new FitAddon(); this.term.loadAddon(fitAddon); this.term.open(document.getElementById('terminal')); // 处理 WebSocket 消息 this.socket.onmessage = (event) => { this.term.write(event.data); }; // 处理输入事件 this.term.onData(data => { this.socket.send(data); }); // 调整终端大小 this.term.onResize(size => { const cols = size.cols; const rows = size.rows; this.socket.send(JSON.stringify({ type: 'resize', cols, rows })); }); // 发送 resize 消息 const cols = this.term.cols; const rows = this.term.rows; this.socket.send(JSON.stringify({ type: 'resize', cols, rows })); }, beforeDestroy() { // 关闭 WebSocket 连接 this.socket.close(); } } </script> ``` 以上代码,我们首先在 `mounted` 钩子函数创建了一个 WebSocket 实例和一个 Terminal 实例。然后我们为 WebSocket 实例添加了一个 `onmessage` 事件监听器,该监听器会在接收到服务器返回的消息时触发,我们在该事件处理函数将消息输出到终端。 接着,我们为 Terminal 实例添加了一个 `onData` 事件监听器,该监听器会在用户输入时触发,我们在该事件处理函数向服务器发送用户输入的命令。同时,我们还为 Terminal 实例添加了一个 `onResize` 事件监听器,该监听器会在终端大小调整时触发,我们在该事件处理函数向服务器发送终端大小变化的消息。 最后,我们在 `beforeDestroy` 钩子函数关闭了 WebSocket 连接。 需要注意的是,以上代码WebSocket 连接是通过 `ws://localhost:8080` 连接本地服务器的,你需要根据实际情况修改 WebSocket 连接地址。另外,代码的消息格式和处理逻辑也需要根据实际情况进行修改。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值