go websocket 群组聊天+基于数据大屏推送技术

本文介绍了如何使用Go语言和WebSocket技术构建一个群组聊天系统,并在此基础上实现数据大屏的自动推送功能。主要内容包括聊天服务器的搭建和定时任务的设置,以实现实时的数据更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参考:http://www.oschina.net/translate/build-a-realtime-chat-server-with-go-and-websockets

基于以上的基础上做了自动推送数据部分

程序主入口增加定时任务:

/**
 *程序入口
 */
func main() {
    //开启一个web scoket server
    fs := http.FileServer(http.Dir("../public"))
    http.Handle("/", fs) 
    http.HandleFunc("/ws", handleConnections)
    go handleMessages()
    go cronTask()
    log.Println("http server started on: 30080")
    err := http.ListenAndServe(":30080", nil)
    if err != nil {
        log.Fatal("ListenAndServe: ", err)
    }   
}
定时任务每五秒从hdfs namenode 监控页面抓取指标数据
/**
 *定时任务 推送消息
 */
func cronTask() {
    c := cron.New()
    defer c.Stop()
    spec := "*/5 * * * * ?"
    c.AddFunc(spec, func() {
        logDebug("cron running...")
        syncHDFSMetricInfo()
    })
    c.Start()

    select {}
}
抓取数据操作:

/**
 *同步HDFS指标信息
 */
func syncHDFSMetricInfo() {
    res := getHDFSInfoFromNameNode()
    var data map[string]interface{}
    if err := json.Unmarshal([]byte(res), &data); err == nil {
        beans := data["beans"].([]interface{})
        bean := beans[0]
        beanMap := bean.(map[string]interface{})
        capacityTotal := beanMap["CapacityTotal"]

        d := dataFilter(capacityTotal.(float64))
        //value, _ := fmt.Printf("%.1f", d["value"])
        value := d["value"].(float64)
        unit := d["unit"].(string)
        syncMetricInfo("hdfs-go", "capacityTotal-go", float64(value), unit)
        //消息写入channel
        fmt.Println("start...")
        msg := Message{"12070162xx@qq.com", "system", "系统自动推送消息..."}
        fmt.Println(msg)
      
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值