小说网站做兼职,网站外链的建设,美食攻略网站建设课程设计,创建企业网站的步骤golang中websocket数据处理和返回json数据示例#xff0c; 直接上代码#xff1a;
// author tekintiangmail.com
// golang websocket 数据处理和返回JSON数据示例#xff0c;
// 这个函数返回 http.HandlerFunc
// 将http请求升级为websocket请求 这个需要依赖第三方包 …golang中websocket数据处理和返回json数据示例 直接上代码
// author tekintiangmail.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)}
}