文档教程后端【免费下载链接】CodeGuide:books: 本代码库是作者小傅哥多年从事一线互联网 Java 开发的学习历程技术汇总旨在为大家提供一个清晰详细的学习教程侧重点更倾向编写Java核心内容。如果本仓库能为您提供帮助请给予支持(关注、点赞、分享)项目地址https://gitcode.com/gh_mirrors/code/CodeGuide点击查看免费下载WaLiSSH 是一款本地运行的 AI SSH 运维助手采用 Tauri 桌面应用 Spring Boot DDD 后端服务架构。本节第1-7节承接上一节的 SSH 连接 API 对接成果解决连接上服务器之后终端面板如何盘活的核心问题——实现打开终端会话、输入命令、读取输出、调整窗口大小、断连检测与重连等完整交互能力。读完本文你将掌握一条从前端 xterm.js 键盘事件到后端 JSch Shell 通道的全链路数据流设计以及为什么在 Tauri 本地场景下用 HTTP 轮询替代 WebSocket 的工程取舍。一、本章诉求终端面板从空壳到可用上一节完成了前端和后端 SSH 连接 API 的对接可以在界面上完成创建、编辑、删除、连接、断开 SSH 服务器等操作。但连接上服务器之后终端面板还只是一个空壳——没办法输入命令也看不到输出。本节要实现 SSH 终端的核心交互能力打开终端会话进入可输入、可输出的交互状态输入命令键盘字符写入远程 Shell读取输出远程执行结果回传渲染调整窗口大小终端列宽行高同步到远程 Pty断连检测与重连会话异常时的兜底能力。整体实现横跨两端后端终端会话管理落在 DDD 架构的 Domain Infrastructure 两层前端xterm.js 集成改造 TerminalPanel 组件。承接产品需求的角度看这就是一次典型的用户说我要在 Web 终端里敲命令的需求落地你需要设计从后端 Shell 通道到前端渲染的完整链路。二、流程设计输入/输出两条数据路径从前端 xterm.js 到后端 JSch Shell 通道完整的数据流被拆分成两条相对独立的路径输入路径和输出路径。1. 输入路径键盘 → POST /terminal/write → JSch OutputStream用户敲键盘时字符从前端一路流向远程 Shell用户在 xterm.js 里敲键盘 → onData 事件拿到输入字符 → 写入缓冲10ms 批量合并 → 调用 POST /terminal/write 发到后端 → 后端写入 JSch Shell 的 OutputStream → 远程 Shell 收到字符并执行这里有两个值得注意的工程细节onData 事件xterm.js 通过onData把用户每次按键的字符包括控制字符、退格、回车等抛给应用层这是前端集成 xterm.js 的标准入口10ms 批量合并高频按键会产生大量小请求前端并不每键必发而是把 10ms 窗口内的输入字符合并成一批再通过POST /terminal/write发送显著降低请求数量避免本地 HTTP 接口被打爆。2. 输出路径JSch InputStream → 后台线程 → GET /terminal/read 轮询 → terminal.write()远程命令产生的输出通过另一条路径回传渲染远程 Shell 产生输出 → 后台读取线程持续从 JSch InputStream 读取 → 写入 StringBuilder 缓冲区 → 前端每 50ms 调用 GET /terminal/read 轮询 → 拿到输出后 terminal.write() 渲染到 xterm.js输出路径的三个关键设计后台读取线程从 JSchInputStream读取是阻塞式的必须放在独立线程里持续消费不能占用 HTTP 请求线程StringBuilder 缓冲读取线程把累积输出写入共享缓冲区作为生产者前端轮询请求作为消费者取走内容实现读写解耦50ms 轮询渲染前端定时通过GET /terminal/read拉取新输出再调用 xterm.js 的terminal.write()增量渲染保证终端画面持续刷新。3. 核心接口一览接口方向作用频率POST /terminal/write前端 → 后端写入输入字符10ms 批量合并随按键触发GET /terminal/read前端 ← 后端轮询拉取远端输出每 50ms这两个接口连同终端会话的建立、窗口 resize、断开与重连共同构成后端终端会话管理的能力面。三、为什么不用 WebSocketTauri 本地场景下的工程取舍这是本节最值得思考的设计决策之一终端双向通信没有采用 WebSocket而是用 HTTP 轮询。核心原因要回到 WaLiSSH 的产品形态WaLiSSH 是 Tauri 桌面应用前端walissh-client与后端walissh-server都运行在本地前后端之间的网络延迟极低50ms 的轮询间隔对终端操作来说完全够用相比维护一条长连接WebSocket 的连接管理、心跳、断线重连、消息帧协议HTTP 轮询实现更简单、更易排查。从工程成本角度看轮询方案把连接状态问题简化成了每次请求独立的问题配合后端会话的断连检测与重连机制已经可以覆盖 Tauri 本地场景下的终端交互需求。这个取舍也说明技术选型没有银弹方案要匹配部署环境。四、后端实现基于 DDD 的终端会话管理1. 技术底座JSch——纯 Java 的 SSH2 客户端库终端会话的底层通道建立在 JSch 之上。JSchJava Secure Channel是 SSH2 协议的纯 Java 实现提供完整的 SSH 客户端能力建立 SSH 会话Session执行远程命令ChannelExec创建 SFTP 通道ChannelSftp端口转发、X11 转发等。WaLiSSH 主要用到前三项能力其中本节的 Shell 通道会话即基于Session建立。认证方式支持密码认证与密钥认证两种互斥使用——优先使用密钥没有密钥则走密码详见 第1-3节SSH连接云服务器。2. 分层落位Domain 层定义能力Infrastructure 层实现通道本节的后端部分遵循 DDD 架构落在 Domain Infrastructure 两层这与前序章节的领域设计一脉相承Domain 层定义终端会话管理的领域服务接口如打开会话、写入输入、读取输出、调整窗口、断连检测与重连以及会话相关的实体与值对象。按照 DDD 的设计理念领域层只描述业务规则不关心底层通道细节Infrastructure 层提供 Port 接口的适配实现真正操作 JSch 的OutputStream/InputStream负责后台读取线程的启动与生命周期管理。这种接口在领域层、实现在基础设施层的依赖倒置DIP设计是 第1-5节连接SSH简单领域设计 中反复强调的核心思想——以后无论底层换成什么 SSH 库Domain 层代码一行都不用改。3. 接口出口SshConnectionController 暴露能力面上一节第1-6节UI接口对接SSH连接操作已经建立了SshConnectionController接口层把创建连接、更新连接、删除连接、获取连接、连接列表等 SSH 连接管理能力通过 HTTP 暴露出去。本节的POST /terminal/write、GET /terminal/read以及窗口 resize、断连重连等接口正是沿着同样的Controller → 领域服务 → Port 适配器 → JSch 通道链路追加的终端会话能力面。4. 为 AI Agent 预留terminalSessionId 的衔接终端会话不是一个孤立功能它要为后续的 AI Shell 智能体能力服务。在 WaLiSSH 第2部分第2-2节最小MVP版本UI对接可以看到SshExecuteAdkTool会从 ThreadLocal或会话级变量拿到terminalSessionId通过TerminalSessionPort.executeCommandAndWait写入命令并阻塞等待 Shell 输出完成再返回清理后的结果给 LLM。这说明本节的终端会话管理需要对外暴露terminalSessionId这样的会话标识供后续 AI 工具链注入与复用第2-3节ReAct Case 架构设计与实现 中用户提交的ChatRequestDTO也携带了terminalSessionId字段。因此在设计终端会话时把会话标识、会话生命周期管理做好就等于为 AI Agent 的命令执行能力铺好了路。五、前端实现xterm.js TerminalPanel 集成前端部分以 xterm.js 为终端渲染核心改造TerminalPanel组件接入两条数据路径输入侧监听 xterm.js 的onData事件拿到用户输入字符 → 10ms 批量合并 → 调POST /terminal/write输出侧定时50ms调GET /terminal/read拉取输出 →terminal.write()渲染。前端 API 对接方式与上一节的api/request.ts保持一致前端会把一系列 API 操作汇总到类文件/包文件下以面向对象结构组织与 Java 代码结构类似后端开发同学阅读这部分 TypeScript 代码也不会吃力。这类封装统一了请求入口、错误处理与数据模型方便 TerminalPanel 只关心取到什么输出、往哪里渲染。六、验证与小结本节的成果可以这样验证在 WaLiSSH 中连接一台云服务器后进入终端面板输入ls、top等命令能够看到远程 Shell 的实时输出与本地 xterm.js 渲染一致调整终端窗口大小后远程 Pty 的尺寸随之同步断开网络或服务器侧关闭会话时能够触发断连检测并支持重连。回顾本节的技术要点双通道数据流输入走POST /terminal/write10ms 批量合并输出走GET /terminal/read50ms 轮询读写解耦、缓冲分离HTTP 轮询替代 WebSocket基于 Tauri 本地部署、低延迟的场景做出的工程取舍实现更简单、足够可用DDD 分层承载终端会话管理能力定义在 Domain 层JSch 通道实现在 Infrastructure 层接口层通过 Controller 暴露为 AI Agent 预留会话标识terminalSessionId贯穿后续 AI 章节的SshExecuteAdkTool与ChatRequestDTO终端会话是智能体命令执行能力的地基。到这里WaLiSSH 已经拥有了一块活的 SSH 终端面板。下一步第2部分将在这条 Shell 通道之上引入 Tool 与智能体编排构建最小 MVP 版本的 AI Shell 运维助手。赞分享文档教程后端【免费下载链接】CodeGuide:books: 本代码库是作者小傅哥多年从事一线互联网 Java 开发的学习历程技术汇总旨在为大家提供一个清晰详细的学习教程侧重点更倾向编写Java核心内容。如果本仓库能为您提供帮助请给予支持(关注、点赞、分享)项目地址https://gitcode.com/gh_mirrors/code/CodeGuide点击查看免费下载相关推荐WaLiSSH 服务端 SSH 连接 API 与前端对接实战从 SshConnectionController 到 api/request.ts 的完整链路WaLiSSH 服务端 SSH 连接 API 与前端对接实战从 SshConnectionController 到 api/request.ts 的完整链路文档教程后端xterm.js输入处理机制从键盘事件到终端命令的旅程xterm.js输入处理机制从键盘事件到终端命令的旅程 你是否曾好奇当在网页终端中按下键盘时字符是如何从按键变成终端中的命令的本文将深入解析xterm.前端UI组件终端与 Shell 原理详解easy-vibe 命令行基础从零到实战终端与 Shell 原理详解easy vibe 命令行基础从零到实战 本文面向零基础读者系统拆解终端Terminal、Shell 与内核Kernel教程文档人工智能Vibe Coding上一篇Omi 后端 GKE 可观测性监控栈Prometheus Grafana Loki 的部署、指标采集与告警体系实战指南下一篇RNN LayerCaffe 循环神经网络层完全指南架构、配置与源码级原理创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
企业数字化 ERP 产品动态
相关推荐
不懂代码想建站?搞懂网站标题的重要性完整流程 不懂代码想建站?搞懂网站标题的重要性完整流程 很多老板想做个企业官网,第一反应是找技术外包,但一听到“服务器配置”、“数据库连接”这些词就头大。其实, 自己不会代码想做网站… · 2026/9/27 10:26:16
Longhorn 深度解析:基于 Kubernetes 的云原生分布式块存储系统 云原生存储高可用容器编排 【免费下载链接】longhorn Cloud-Native distributed storage built on and for Kubernetes 项目地址: https://gitcode.com/gh_mirrors/lo/longhorn 点击查看 免费下载 Longhorn 是 CNCF 孵化项目(Incubating Project&#x… · 2026/9/27 10:26:10
做酷炫网站设计风格前必看的3个备案注意事项 做酷炫网站设计风格前必看的3个备案注意事项 很多甲方在华北区找我们聊项目时,第一句往往不是问“酷炫网站设计风格”有多炫,而是带着满脸的困惑问:“备案流程一头雾水,是不是搞完设计还得再折腾一遍?”这种焦虑太真实了。你看着参考图里那些粒子动画、… · 2026/9/27 11:18:36
网站建设需要什么功能搞不清?3招搞定源码下载避坑指南 网站建设需要什么功能搞不清?3招搞定源码下载避坑指南 刚入行做网站建设,是不是经常被“域名服务器搞不懂”这几个字卡得死死的?很多新手拿着预算找外包,或者自己折腾,结果发现钱花出去了,网站却像个半成品。其实, 网站建设需要什么功能… · 2026/9/27 11:18:36
MySQL数据库:联合查询 适用环境:MySQL 8.0(示例按 MySQL 8.0.39 编写) 1. 联合查询解决什么问题
规范化会把实体拆到不同表中;读取完整业务信息时,需要重新组合数据
“联合查询”在本章中是一个宽泛概念,主要包括: … · 2026/9/27 11:18:30
e盒印网站开发实战案例:3步搞定备案与设计落地 e盒印网站开发实战案例:3步搞定备案与设计落地 刚接了个e盒印的定制站单子,客户第一句话不是问价格,是问:“备案到底怎么弄?我看了一堆资料还是觉得一头雾水。” 这种场景太常见了。很多设计师转前端,或者刚入行的开发,代码写得飞起,一碰到… · 2026/9/27 11:18:30
MySQL数据库:索引 适用环境:MySQL 8.0,存储引擎以 InnoDB 为主。 索引的最终目标不是“数量多”,而是让常用查询以更少的页面访问得到更少的候选行。 1. 索引
索引是存储引擎维护的、有序的数据结构。它保存索引键及定位记录所需的信息,使 MySQL 不… · 2026/9/27 11:18:30
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现 简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01
汕头网站建设制作厂家避坑指南:5大注意事项救急 汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习 简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01
MATLAB雷达信号脉冲压缩仿真:LFM线性调频、匹配滤波与距离分辨率实现 简介:这套Matlab仿真工具完整呈现雷达信号脉冲压缩过程,从线性调频(LFM)信号生成、目标回波仿真到匹配滤波压缩处理均有可运行代码支撑,面向电子信息工程、计算机、数学等专业学生,适用于课程设计、期末大作… · 2026/9/27 0:00:01
汕头网站建设制作厂家避坑指南:5大注意事项救急 汕头网站建设制作厂家避坑指南:5大注意事项救急 改个需求建站公司拖一周,这种憋屈事我见得太多了。 很多汕头老板找本地建站团队,签合同前看着方案挺美,一上线就变脸。 今天不聊虚的,直接拆解找 汕头网站建设制作厂家 时的5个核心 注意事项… · 2026/9/27 0:00:01
多模态虚假新闻检测实战:BERT+ResNet双塔与对比学习 简介:基于PyTorch的多模态虚假新闻检测项目完整代码包,面向自然语言处理与计算机视觉交叉方向的开发者、科研人员及毕业设计选题者,解决社交媒体中文本与图像联合识别虚假新闻的问题。系统以BERT预训练模型提取文本语义特征,以Res… · 2026/9/27 0:00:01