使用 websocket 发送数据给前端过段时间后后端程序卡死
資深大佬 : swqslwl 3
后端程序启动后 120 秒左右就卡死了,无论推送速度是快还是慢,总是会卡死。没有任何报错信息。
后端用的是 go,gin 框架中开了 2 个协程,1 个用来接受数据,1 个用来入库和用 websocket 发给前端。
接受数据和数据库写入都没问题。应该就是 websocket 推给前端时的问题。也检查了协程数,都是正常的。
var upgrader = websocket.Upgrader{ // ReadBufferSize: 1024, //WriteBufferSize: 1024, // 允许所有的 CORS 跨域请求,正式环境可以关闭 CheckOrigin: func(r *http.Request) bool { return true }, } var dataTmp []byte func init() { http.HandleFunc("/ws", wsHandler) } // 启动程序 func StartWebsocket(addrPort string) { http.ListenAndServe(addrPort, nil) } func(){ ... go StartWebsocket("173.10.10.100:88") ... } func wsHandler(resp http.ResponseWriter, req *http.Request) { // 答客户端告知升级连接为 websocket wsSocket, err := upgrader.Upgrade(resp, req, nil) if err != nil { fmt.Println("升级为 websocket 失败", err.Error()) return } go wsWriteLoop(wsSocket) } func wsWriteLoop(wsConn *websocket.Conn) { for { if len(dataTmp) != 0 { fmt.Println(time.Now()) err := wsConn.WriteMessage(websocket.TextMessage, dataTmp) dataTmp = dataTmp[0:0] if err != nil { fmt.Println("发送消息给客户端发生错误", err.Error()) wsConn.Close() return } } } }
大佬有話說 (8)