环境
go 1.16
github.com/gorilla/websocket 1.4.2
window 10
在本地开发时,用chrome的两个标签页打开网页(一个locahost访问,一个IP访问),通过IP连接websocket地址,不管我在哪一个标签页,刷新一下后,收发websocket都是正常,但另一个标签页却无法收到且无法发出,除非我刷新它,但如此的话,前一个也出相同的问题。
有人遇到相同问题吗?是如何解决的呀?
A
B
更新补充
以下是部分serve的代码
package ws
package ws
import (
"encoding/json"
"fmt"
"net/http"
"time"
"github.com/gin-gonic/gin"
"github.com/gorilla/websocket"
)
type WsJsonRespone struct {
Type int `json:"type"`
Data interface{} `json:"data"`
}
const (
MESSAGE_NOTICE = 10000 //通知
MESSAGE_CHAT = 10001 //聊天
)
//设置websocket
//CheckOrigin防止跨站点的请求伪造
var upGrader = websocket.Upgrader{
ReadBufferSize: 1024,
WriteBufferSize: 1024,
HandshakeTimeout: 5 * time.Second,
CheckOrigin: func(r *http.Request) bool {
return true
},
}
var ws = new(websocket.Conn)
//websocket实现
// @Tags websocket
// @Summary ws
// @Router /api/v1/ws [get]
func Ws(c *gin.Context) {
var err error
//升级get请求为webSocket协议
ws, err = upGrader.Upgrade(c.Writer, c.Request, nil)
if err != nil {
return
}
// defer ws.Close() //返回前关闭
for {
//读取ws中的数据
mt, message, err := ws.ReadMessage()
if err != nil {
break
}
//写入ws数据
err = ws.WriteMessage(mt, message)
if err != nil {
break
}
}
}
func SendJSON(datatype int, data interface{}) {
if ws != nil {
jsonData, err := json.Marshal(WsJsonRespone{
Type: datatype,
Data: data,
})
//写入ws数据
err = ws.WriteMessage(1, jsonData)
if err != nil {
fmt.Println("ws 发送失败")
}
}
}
package router
...
v1.GET("/ws", ws.Ws)
...
已解决(是我太菜了,没有为每一个连接独立创建套接字),后面参照github的chat案例解决。