你喜欢的 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))}()
文章插图
推荐阅读
- 谷歌浏览器拟禁用第三方Cookies 遭英国反垄断调查
- 鸿蒙饱受花粉吐槽,但却是华为的一步好棋?
- 三星S21系列大量第三方保护壳曝光 有没有你喜欢的?
- 开放式|不喜欢在健身时戴入耳式的人可以试试这款Bose新耳机
- 官方:小米手机适配海量充电器 第三方不兼容可随时反馈
- 微软浏览器2021年迎重大版本:这样的Edge 88你喜欢吗
- 为什么我喜欢C语言,却非常讨厌C++?一位国外程序员的回答
- 汽车|四部委联合发布通知 进一步完善新能源汽车推广应用财政补贴
- 4款在明年上线的5G新机,小米11只能算一般,你喜欢哪一部?
- 服务器宕机,商城Bug,封杀第三方无线充,苹果这是怎么了?
