很久以来,我一直想用 WebSocket 创建一个项目,但一直没有好主意。有一天,我正在用 Htop 查看我的 VPS 资源。突然,一个想法闪现在我的脑海里:为什么不使用 WebSocket 来实时远程操作呢?
理念 这个概念很简单。我不用每次都通过 SSH 登录服务器来查看 CPU 使用率、内存或磁盘空间,而是可以构建一个 Web 仪表盘来实时传输这些信息。WebSocket 非常适合这种场景,因为它可以保持持久连接,无需持续轮询即可将更新推送到浏览器。
技术栈 和往常一样,我会使用 Go。对于这么简单的项目,我使用了 Go 的标准net/http库来构建 Web 服务器、进行 WebSocket 连接以及./shirou/gopsutil获取系统指标。
这个技术栈的魅力在于它非常轻量。无需繁琐的框架,也无需复杂的设置。只需三个依赖项即可轻松上手。
快速提示:是的,像 Prometheus 和 Grafana 这样的工具已经做到了这一点(甚至更好)。但这有什么乐趣呢?这个项目就是为了学习这些东西背后的工作原理。
工作原理 该服务器主要做两件事。首先,它提供一个包含 CSS 和 JavaScript 的简单 HTML 页面,该页面连接到 WebSocket 端点。其次,它使用 gopsutil 收集系统统计信息,并大约每秒通过 WebSocket 连接推送一次。
在后端,gopsutil 可以非常轻松地获取 CPU 百分比、内存使用情况、磁盘空间甚至网络统计信息。gorilla/websocket 包负责从 HTTP 升级到 WebSocket,并管理连接生命周期。
前端由基本的 HTML、CSS 和 JavaScript 组成。页面加载时,它会建立 WebSocket 连接并监听消息。每条消息都包含 JSON 数据,其中包含当前系统状态,并会实时显示在页面上。
这个项目为何重要 这看起来像个玩具项目,但它教会了我一些宝贵的概念。我学习了 WebSocket 如何维护有状态连接,如何在 Go 中处理并发客户端,以及如何以编程方式收集系统指标。
而且它真的很有用。现在我可以从任何浏览器检查服务器的运行状况,而无需 SSH 访问权限。您可以扩展它来监控多台服务器,在资源达到特定阈值时添加警报,甚至可以创建显示资源使用情况随时间变化的图表。
主题 仪表盘提供五种不同的视觉风格,以满足您的偏好。以下是每个主题的外观:
我不太擅长设计 UI,所以有很多地方需要改进。如果你对前端感兴趣,欢迎贡献代码,让它变得更好。
入门 如果您想亲自尝试一下,请按以下步骤操作:
克隆存储库:
cd res_mon 安装依赖项: go mod tidy 运行服务器: go run main.go 代码很简单,因此您可以轻松修改它来跟踪不同的指标或更改发送更新的频率。
还有一件事... 哦,我冒昧地写了 Dockerfile 和 docker-compose.yaml 文件。这有必要吗?绝对没有必要。能不能直接运行就go run main.go完事了?是的。我是不是花了额外的时间去容器化一个实际上只需要一个命令就能运行的项目?同样是的。作者www.mjsyxx.com