Golang WebSocket 疑难杂症:单标签页断线问题排查
在使用Golang的gorilla/websocket库构建WebSocket应用时,开发者经常会遇到一些挑战。本文将深入分析一个常见问题:在本地开发环境(Chrome浏览器,两个标签页分别访问localhost和IP地址)下,其中一个标签页(例如通过IP访问的标签页)无法持续接收WebSocket消息。
问题描述:
使用Go 1.16和gorilla/websocket 1.4.2版本,在Windows 10系统上进行开发。通过localhost和IP地址分别访问同一WebSocket服务,发现一个现象:刷新其中一个标签页后,该标签页能正常收发消息,但另一个标签页却无法接收或发送消息,除非也进行刷新。这提示问题并非网络连接本身,而是WebSocket连接管理。
问题代码片段(简化版):
服务器端代码的核心在于ws函数,负责处理WebSocket连接升级和消息收发。 问题在于使用了全局变量ws来存储websocket.Conn对象:
var ws *websocket.Conn // 全局变量func ws(c *gin.Context) { var err error ws, err = upgrader.Upgrade(c.Writer, c.Request, nil) // ...后续代码...}
登录后复制
本文来自互联网或AI生成,不代表软件指南立场。本站不负任何法律责任。