golang websocket服务端代码中ReadMessage方法若是客户端没有链接会一直报错并且最后关闭websocket有什么办法可以解决这个问题等待客户端链接发送消息如果用循环的话connReadMessage会一直抛出错误如何测试客户端是否链接上服务端避免ReadMessage出错无线循环等待没有用ReadMessage方法检测到客户端未链接就会抛出错误直到关闭这个websocket等
可以使用goroutine并发处理,一个goroutine用来等待客户端连接,另一个goroutine用来处理客户端发送的消息。具体实现可以参考以下代码:
func handleWebSocket(conn *websocket.Conn) {
defer conn.Close()
// 等待客户端连接
for {
_, _, err := conn.ReadMessage()
if err != nil {
log.Println("Failed to read message:", err)
return
}
// 客户端已连接,跳出循环
break
}
// 处理客户端发送的消息
for {
messageType, p, err := conn.ReadMessage()
if err != nil {
log.Println("Failed to read message:", err)
return
}
// 处理消息
handleMessage(messageType, p)
}
}
func main() {
http.HandleFunc("/ws", func(w http.ResponseWriter, r *http.Request) {
upgrader := websocket.Upgrader{}
conn, err := upgrader.Upgrade(w, r, nil)
if err != nil {
log.Println("Failed to upgrade to websocket:", err)
return
}
go handleWebSocket(conn)
})
http.ListenAndServe(":8080", nil)
}
在handleWebSocket函数中,第一个for循环用来等待客户端连接,如果客户端连接上了就跳出循环,进入第二个for循环处理客户端发送的消息。如果客户端断开连接或出现其他错误,就会退出循环并关闭websocket连接。在main函数中,使用goroutine并发处理每个客户端的连接
原文地址: https://www.cveoy.top/t/topic/dUlh 著作权归作者所有。请勿转载和采集!