当前位置: 首页 > news >正文

golang websocket 数据处理和返回JSON数据示例

golang中websocket数据处理和返回json数据示例, 直接上代码:

// @author tekintian@gmail.com
// golang websocket 数据处理和返回JSON数据示例,
// 这个函数返回 http.HandlerFunc 
// 将http请求升级为websocket请求 这个需要依赖第三方包 go get github.com/gorilla/websocket
func  WsHandler() http.HandlerFunc {return func(w http.ResponseWriter, r *http.Request) {var upgrader = websocket.Upgrader{ReadBufferSize:  1024,WriteBufferSize: 1024,}// 将普通链接转换为socket链接 ws, err := upgrader.Upgrade(w, r, nil)if err != nil {return}defer ws.Close()// 向websocket发送数据_ = sendStats(ws, 1*time.Second)}return nil
}// 向websocket发送json数据 注意这里的 for range ticker.C { 的使用
func sendStats(conn *websocket.Conn, frequency time.Duration) error {ticker := time.NewTicker(frequency) // 定时器 在指定的时间间隔中执行defer ticker.Stop() // 确保退出时关闭定时器// 循环定时器管道,这里的for循环会 每个frequency执行一次for range ticker.C {w, err := conn.NextWriter(websocket.TextMessage)if err != nil {return err}if err := WriteValues(w); err != nil {return err}if err := w.Close(); err != nil {return err}}
}// 同步写入锁
var mu  sync.Mutexfunc WriteValues(w io.Writer) error {mu.Lock()defer mu.Unlock()// 定义并初始化要写到ws中的数据m := map[string]any{"a":    "123","ts": time.Now().UnixMilli(),}// 其他信息写入// 将数据m json编码后写入到wif err := json.NewEncoder(w).Encode(m); err != nil {return fmt.Errorf("failed to write/convert values to json: %v", err)}
}

http://www.lryc.cn/news/366112.html

相关文章:

  • 【Mac】Downie 4 for Mac(视频download工具)兼容14系统软件介绍及安装教程
  • 【操作系统】进程与线程的区别及总结(非常非常重要,面试必考题,其它文章可以不看,但这篇文章最后的总结你必须要看,满满的全是干货......)
  • 自动驾驶仿真(高速道路)LaneKeeping
  • 数据挖掘实战-基于Catboost算法的艾滋病数据可视化与建模分析
  • 分水岭算法分割和霍夫变换识别图像中的硬币
  • 什么是AVIEXP提前发货通知?
  • Python 之SQLAlchemy使用详细说明
  • 就业班 第四阶段(docker) 2401--5.29 day3 Dockerfile+前后段项目若依ruoyi
  • 【运维项目经历|026】Redis智能集群构建与性能优化工程
  • Linux编程for、while循环if判断以及case语句用法
  • docker命令 docker ps -l (latest)命令在 Docker 中用于列出最近一次创建的容器
  • inflight 守恒和带宽资源守恒的有效性
  • 短视频直播教学课程小程序的作用是什么
  • Open AI又出王炸GPT-4,目测一大波人的饭碗要碎了...
  • 8086 汇编笔记(八):转移指令的原理
  • win 系统 cmd 命令从私库上传,下载jar包
  • dots_image 增强图像中的圆点特征
  • 代码随想录算法训练营第十五天| 110.平衡二叉树、 257. 二叉树的所有路径、404.左叶子之和
  • MSP430单片机控制流水灯,Proteus仿真
  • 出售iPhone前的必做步骤:完全擦除个人数据的方法
  • npm yarn 更换国内源以及node历史版本下载地址
  • 微信小程序手机号码授权登录
  • 【网络编程开发】1.网络结构 2.IP地址与端口号 3.字节序
  • 读取文件
  • Allure在jenkins中无法显示的问题
  • 建筑建筑一建考试试题及答案,分享几个实用搜题和学习工具 #其他#职场发展
  • [240607] Jina AI 发布多模态嵌入模型 | PHP 曝新漏洞 | TypeScript 5.5 RC 发布公告
  • LeetCode 算法:滑动窗口最大值c++
  • 荆州餐饮环保在行动:清洗油烟净化器,守护城市环境
  • AIConnect赋能加持丨AI+DEPIN 共同推动AI发展的技术与运用峰会圆满落幕