您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

golang使用websocket时遇到无法收到信息的问题。

golang使用websocket时遇到无法收到信息的问题。

环境

go 1.16
github.com/gorilla/websocket 1.4.2
window 10

在本地开发时,用chrome的两个标签页打开网页(一个locahost访问,一个IP访问),通过IP连接websocket地址,不管我在哪一个标签页,刷新一下后,收发websocket都是正常,但另一个标签页却无法收到且无法发出,除非我刷新它,但如此的话,前一个也出相同的问题。

有人遇到相同问题吗?是如何解决的呀?

A
image.png

B
image.png

更新补充

以下是部分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)
...
golang 2022/2/7 16:57:16 有572人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶