你喜欢的 Go 第三方库:一步为系统集成可视化实时运行时统计( 二 )

这里主要是 statsviz.Ws 和 statsviz.Index , 因为 gorilla/mux 库兼容 net/http , 所以可以这么做 。
不兼容 net/http 的框架比如集成进 Gin 框架 。 做法就是和“没有提供 HTTP 服务的项目”一样 , 另开一个 HTTP 端口 。
go func() {statsviz.RegisterDefault()log.Println(http.ListenAndServe("localhost:8080", nil))}()因此这里实际上和具体框架没关系 。
最佳实践因为 runtime 信息属于系统内部信息 , 不适合暴露给公网用户 。 因此 , 实际上中 , 最佳实践是 , 不管什么情况下 , 都单独开一个 HTTP 端口 , 类似下面这样 , 对公网不可访问 。
go func() {statsviz.RegisterDefault()log.Println(http.ListenAndServe("localhost:8080", nil))}()原理简单说明该库使用 WebSocket 协议 , 定时将系统的 runtime 数据发送给浏览器 , 浏览器接收到之后 , 利用 JS 绘制图表 , 展示出来 。 Go 核心代码如下:
// sendStats indefinitely send runtime statistics on the websocket connection.func sendStats(conn *websocket.Conn) error { tick := time.NewTicker(defaultSendPeriod) defer tick.Stop() var stats stats for {select {case <-tick.C:runtime.ReadMemStats( err != nil {return err}} }}对客户端代码感兴趣的请自行阅读源码 。
总结如果你需要实时图表的方式查看系统运行时的一些数据 , 可以尝试下它 。 用类似这样几行代码一步将它集成进你的系统:
go func() {statsviz.RegisterDefault()log.Println(http.ListenAndServe("localhost:8080", nil))}()
你喜欢的 Go 第三方库:一步为系统集成可视化实时运行时统计文章插图


推荐阅读