swagger2关闭/v2/api-docs(swagger2config)

swagger2关闭/v2/api-docs(swagger2config)目录 概述 远程执行 pod 命令的基本方法 后端 websocket 的实现 前端 总结 上一章通过 http chunked 长连接实现了 pod 的日志读取和展现 本章将通过前端的 xterm js 库以及 websocket 来实现 pod 终端在浏览器页面上的实现 首先构建一个请求 如果是一次性执行命令 我们会将 command 以 string 你要执行的命令 的值传入

大家好,我是讯享网,很高兴认识大家。



目录

概述

远程执行pod命令的基本方法

后端websocket的实现

前端

总结


上一章通过http chunked 长连接实现了pod的日志读取和展现;

本章将通过前端的xterm.js库以及websocket来实现pod终端在浏览器页面上的实现。

首先构建一个请求

如果是一次性执行命令,我们会将command以


讯享网

[]string{“你要执行的命令”}

的值传入;

以这个请求获取到url地址来创建远程命令执行对象

值得一提的是SPDY是谷歌开发的通信协议,在TCP层之上,HTTP/2的关键功能主要来自SPDY技术,换言之,SPDY的成果被采纳而最终演变为HTTP/2。

通过前步获得到的远程命令执行对象,我们可以开启流式传输,并制定标准输入/输出的方向

 执行,即可在Terminal控制台观察到相应的结果返回。

我们知道,当我们在前端键入指令,传送到后端时。这个指令不可能是写死的,这就要求前后有一定的交互,并且后端执行后的结果需要通知到前端,来对页面进行渲染。所以我们需要使用到websocket。在上一节中我们将远程执行命令对象的返回结果定向到了os标准输出,也就是控制台,这一节我们来尝试将它通过 websocket 客户端返回给前端。

本文以gin框架来演示;

从*gin.Context中获取我们必要的参数,即交互的容器

 老套路,把http连接升级成websocket连接

接下来很关键,我们需要把这个ws客户端取代os标准输出,作为远程命令对象的输出。

查看StreamOptions的成员变量

type StreamOptions struct { Stdin io.Reader Stdout io.Writer Stderr io.Writer Tty bool TerminalSizeQueue TerminalSizeQueue }

因此,我们需要通过ws客户端构建对象,并且实现Reader/Writer接口,其实就是往ws客户端里面灌数据/取数据

至此,后端部分就完成了;通过对应接口访问进来,远程命令执行对象会将通过ws收到的消息作为命令去执行,并通过ws连接把命令执行结果返回回去。

完整代码:

附前端部分完整代码

当我们在终端输入框键入命令并回车结束时,会触发终端组件的onData事件,onData事件会通过ws客户端将这部分数据发送给后端。后端将处理完成的结果通过ws连接返回给前端,触发了ws客户端的onmessage事件,然后调用终端组建的write方法,将结果再打印出来。

至此,我们就完成了pod shell的实现。

在下一章中,我们将在此基础上进一步实现node shell。其实原理是类似的,基本思路就是通过ssh开启一个会话,并同样以其构造实现io.Reader和io.Writer接口的结构体。

小讯
上一篇 2025-05-12 16:11
下一篇 2025-04-17 15:12

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/170778.html