基于websocket的远程控制台系统
历数各类软件系统,你会发现每一个牛B的系统都会自带一个控制台,用于观察系统状态和调整系统参数,比如Linux, MySQL等。
- 支持自定义command:
server.RegisterCommand(cmd)
- 支持自定义topic,订阅后可周期性推送数据到控制台:
server.RegisterTopic(topic)
- 安全验证:对于关键的系统命令,可以设置
cmd.IsPublic=false
,这一类命令只能使用auth
验证后才能使用 - 历史命令:输入history查看历史命令,输入 !98 执行历史命令列表中的第98命令
- Tab键命令补全
- 直接运行examples/demo/main.go
- 在浏览器中输入 http://127.0.0.1:8888/console
- 按提示在文件框中输入help命令,查看帮助信息
- 可以通过查看main.go的源代码,学习如何注册command和topic
部分代码如下:
func main() {
var webPort = 8888
var mux = http.NewServeMux()
var server = gonsole.NewServer(mux,
gonsole.WithPort(webPort), // webserver端口
gonsole.WithPageTemplate("console.html"), // 页面文件模板
gonsole.WithUserPasswords(map[string]string{"xmli": "123456"}), // 认证使用的用户名密码
gonsole.WithEnablePProf(true), // 开启pprof
)
server.RegisterCommand(&gonsole.Command{
Name: "hi",
Note: "打印 hi console",
IsPublic: false,
Handler: func(client *gonsole.Client, texts [] string) {
var bean struct {
Text string
}
bean.Text = "hello world"
client.SendBean(bean)
},
})
}
- 引入完整的登录验证方式
将项目中的js逐步过渡为Vue框架, 目标是梳理代码框架, 通过import减小代码单元的大小逐步使用typescript代替javascript, 引入编译机制- 升级golang以引入泛型机制. 但这件事情在centos的yum默认支持到1.18+之前不能考虑. 目前(2022-09-03) 最新版本是golang 1.19。(centos目前官方不再更新)
逐步移除gaio这个库, 在golang 1.17+的centos上编译会报错, 它升级太慢了. 相关issue- 引入对https的支持, 或者至少设计出完整的支持方案. 在golang库中直接支持可能比在nginx上支持要更下简单一些, 毕竟会减少对nginx的依赖.
另外, gaio这个库似乎不支持https