Golang websocket nil memory error



下面是我的websocket服务器的代码。

http.Handle("/gatewayconnector", websocket.Handler(socketHandler))

方法套接字处理程序具有以下代码:

func socketHandler(ws *websocket.Conn) {
    LoadClient(ws)
    var msg []byte
    for {
        if err := websocket.Message.Receive(ws, &msg); err != nil {
            log.Error("Error in socketHandler: ", err)
            break
        }
        validateMessage(msg)
    }
}

当客户端发生握手时,将调用套接字处理程序回调方法,并且它还启动 websocket 对象。因此,在此方法的第一步中,我将这个 websocket 对象存储到一个数组中,以便我可以在发送方法调用(用于向客户端发送消息)中检索它。

问题是有时我在 ws 中得到零内存引用,即在尝试向客户端发送一些消息时 websocket。

下面是发送方法代码:

func Send(msg interface{}) error {
    ws := webSocketClients[0]
    if (ws == nil) {
        log.Error("Websocket connection is nil, gateway should initiate the connection.")
    }
    return websocket.JSON.Send(ws, msg)
}

当 websocket 连接 remanis 空闲时间较长并且我直接调用 send 方法时,会出现此问题。

现在我已经设置了一个黑客,客户端将定期ping我的websocket服务器以避免这种情况。

如何避免这种问题?

按间隔 ping websocket 连接是正常的事情,请在大猩猩 Websocket 聊天示例中检查它是如何完成的。我知道你正在使用net/websocket,但想法应该是相似的。问题是你不能指望你的长期TCP连接将保持活动状态,特别是在公共网络中。某些防火墙会在一段时间后静默地 RST 连接,而不会产生流量。

相关内容

  • 没有找到相关文章

最新更新