在 Golang WebSocket 服务端代码中,conn.ReadMessage() 方法在客户端没有连接的情况下会一直报错并最终关闭 WebSocket 连接。本文介绍了一种解决方案,可以使用无限循环来等待客户端连接并发送消息,同时需要注意在每次循环中判断连接是否已关闭。

解决方法:

使用无限循环来等待客户端连接并接收消息,并在每次循环中判断连接是否已关闭。如果已关闭,则退出循环。

示例代码:

for {
    _, message, err := conn.ReadMessage()
    if err != nil {
        if websocket.IsCloseError(err, websocket.CloseGoingAway, websocket.CloseAbnormalClosure) {
            // 连接已关闭,退出循环
            break
        }
        // 其他错误,继续等待客户端连接
        continue
    }

    // 处理消息
    fmt.Printf('Received message: %s\n', message)
}

代码解释:

  • 在上面的代码中,使用了一个无限循环来等待客户端连接并接收消息。
  • 每次循环中,调用 conn.ReadMessage() 方法来读取客户端发送的消息。
  • 如果发生错误,首先判断是否是连接已关闭的错误,如果是,则退出循环;否则,继续等待客户端连接。
  • 如果没有发生错误,则处理客户端发送的消息。

注意事项:

  • 上面的代码只是示例代码,实际使用时需要根据具体情况进行修改和优化。
  • 可以在循环中加入超时机制,防止长时间等待客户端连接而导致程序阻塞。

总结:

通过使用无限循环并判断连接是否已关闭,可以优雅地处理 Golang WebSocket 服务端代码中客户端未连接的情况。同时,加入超时机制可以进一步优化代码,防止程序阻塞。

Golang WebSocket 服务端:如何优雅处理客户端未连接情况

原文地址: https://www.cveoy.top/t/topic/ga7E 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录