golang gin+websocket+xterm.js基础教学实战四
文章目录
本篇教程完成了基于单二进制文件启动的web terminial应用程序,无任何第三方依赖,随用随启动。
本教程是前三篇基础教程的实战编程,结合了前端、后端、安全和网络开发等技术。
Usage:
|
|
重点技术列表
- 静态文件打包到二进制文件中,比如html、js、css等
- http转websocket后端技术启动
- gin web框架的使用
- cobra cli命令行工具使用
- websocket协议的诸多问题分析和解决
- xterm3.html单页面技术的开发和页面动态渲染技术
- gin router路由策略与静态二进制文件路由策略的结合
- web安全技术的引进,比如:Xsrf、BasicAuth、Audit、Base64
- Golang 携程的实战应用
- Makefile编译工具的深入使用
静态文件打包
将静态文件打包进golang的二进制执行文件利用的是bytes.Buffer缓存技术加上将文件硬编码到Code中去实现的,采用的开源工具包go-bindata
和文件服务包go-bindata-assetfs
。
安装go-bindata
makefile片段
|
|
生成硬编码Code
|
|
最后会在../
目录生成asset.go
文件,Packege
名称为tty
。
http升级为websocket
多说不宜,直接上代码
|
|
cobra cli命令行工具使用
|
|
websocket协议的诸多问题分析和解决
- 最头疼的【1002】invalid UTF-8 in Close frame
原因:因为websocket支持text和binary两种编码格式,对应129和130,一旦发现返回信息中有UTF8编码的往text协议类型发就会报错。(开源项目很多都是以text 129进行默认编码)
解决:
|
|
html单页面动态渲染技术
主要用到了go template + 静态bytes.Buffer页面 + gin web渲染,具体方法在代码中体会。
前端xterm3.html
|
|
后端golang传值渲染
|
|
gin router路由策略与静态二进制文件路由策略的结合
关键代码
|
|
web安全技术的引进
- XSRF
关键技术就是编码和流程解析,如下:
1. 前端请求页面
2. 后端生成XsrfToken并写入渲染页面
3. 前端按照: msgType + XsrfToken + Base64.encode(message)进行信息传递
4. 后端按照约定好的编码进行解析并验证XsrfToken
5. 成功则继续 失败退出
- BasicAuth http常用用户密码认证
- Audit 登录请求申请功能,用sqlite3进行数据存储和api查询
Golang 携程的实战应用
整个后端编程,Golang携程贯穿始终
- http内部携程
- websocket通信Send、Receive、HandlerClient均为携程运行
- channel用于退出信号传递和连接携程管控
Makefile编译工具的深入使用
编译过程比较复杂,需要生成asset.go硬编码程序,依赖包等预制条件准备,代码编译和代码推送以及代码测试等工作,Makefile
不二选择。实际文件:
|
|
线上部署
最近又加了几个新功能:
- https 的支持
- aduit 增加了访问名单记录和查询结果优化
- systemctl 部署showme tty
注意
用systemctl进行部署的时候会报TERM environment variable not set
,这个需要在service文件里面指定环境变量TERM=xterm-256color
|
|
参考
文章作者 lixueping
上次更新 2020-03-10
许可协议 MIT