# xterm EventSource **Repository Path**: callens/xterm-event-source ## Basic Information - **Project Name**: xterm EventSource - **Description**: 使用xterm完成连接linux服务端的功能,页面端使用EventSource,服务端使用spring的SseEmitter,并启动quartz定时任务向前端传输数据,项目使用非maven工程 - **Primary Language**: Java - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 3 - **Forks**: 1 - **Created**: 2020-11-17 - **Last Updated**: 2022-06-24 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # xterm EventSource #### 介绍 ##### 项目来源 需实现一个在页面上连接linux的服务器的功能 项目中使用的是tomcat,非maven项目(每一个jar包都需要自己手动去下载,这样有个好处是可以知道这个jar包的作用) 浏览了一些git库上的一些项目,发现都是使用websocket,不符合当前项目的需求 ##### 项目设计 使用websocket需要进行协议升级,现不支持这种操作,本项目使用EventSource,并且现在Spring也对其进行了支持, EventSource是在浏览器上发送标志为流的请求,以获得服务器返回的内容 ##### 项目逻辑 需保证浏览器支持EventSource这个功能,基本现在主流的浏览器都进行了支持,若浏览器的版本过低,需要对浏览器进行升级处理; 使用xterm获取用户在浏览器上输入的字符信息,这些字符信息不能直接传输到服务端,否则会发生不可预知的错误,需要使用Base64进行加密的方式进行发送,可以使用其他方式进行加密,只要在服务端进行对应的解密即可 当获得了用户输入的信息,使用EventSource把数据发送到服务端,服务端使用jsch进行连接到Linux服务器,获取到Channel,将数据进行Base64解密发送到OutputStream中 读取Channel返回的信息,使用read进行阻塞读取,使用定时任务启动读取操作,定时任务增加了一次重试操作,预防断网的情况 当页面获取到服务器返回的信息时,使用Base64进行解码,将解码之后的数据给xtrem,xterm会解析这些数据并展示出来 ##### 业务逻辑 使用用户ID进行区分唯一用户,如果当前的用户ID已经存在,则不能再进行登录使用,可以再重新换一个用户ID #### 软件架构 本项目使用的技术框架 日志框架:logback(版本1.2.3),slf4j(版本1.7.17) Spring框架:SpringMVC,SpringWebflux,SpringCore(版本5.2.9) Json框架:jackson(版本2.12.0) Commons框架:commons-lang3(版本3.11) Linux SSH连接框架:jsch(版本0.1.55),jzlib(版本1.1.3) 定时任务框架:quartz(版本2.3.2) 前端页面终端模拟器:xterm(版本4.9) 前端UI:layui(版本2.5.6),jquery(版本3.5.1) 前端编码:base64(版本3.14.1) JDK版本 1.8 Tomcat版本 8.5 #### 使用说明 1. 访问 http://127.0.0.1:8080/xterm/index 输入用户ID,IP地址,端口号,用户名,密码,校验通过之后,进入服务器Shell界面 2. 登录成功则跳转到 http://127.0.0.1:8080/xterm/loginSSH 这个页面有一个定时任务,在一秒钟之后进行自动尝试连接linux,连接成功之后我们会进入shell界面 #### 其他 有大神有更好的相法,欢迎进行交流