编辑
2024-11-26
后端
00
请注意,本文编写于 165 天前,最后修改于 165 天前,其中某些信息可能已经过时。

最近在写一个即时通讯应用,需要用到websocket,用的库是github.com/gofiber/contrib/websocket,简单封装的fasthttp.websocket,然后发现websocket.Conn.Close()不能关闭连接,客户端还可以发信息

因为没有这个API不是关闭ws连接的,因该手动发送关闭消息

go
func (s *Session) Close() error { if s.Ws == nil { return errors.New("WebSocket connection is nil") } // 发送 WebSocket 关闭消息 deadline := time.Now().Add(time.Minute) err := s.Ws.WriteControl( websocket.CloseMessage, websocket.FormatCloseMessage(websocket.CloseNormalClosure, ""), deadline, ) if err != nil { return err } // 设置读取下一条消息的截止时间 err = s.Ws.SetReadDeadline(time.Now().Add(5 * time.Second)) if err != nil { return err } // 读取消息,直到确认关闭消息 for { _, _, err = s.Ws.NextReader() if websocket.IsCloseError(err, websocket.CloseNormalClosure) { break } if err != nil { break } } // 关闭 TCP 连接 err = s.Ws.Close() if err != nil { return err } s.Ws = nil // 将连接置为 nil,避免重复关闭 return nil }

本文作者:yowayimono

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!