在 Go WebSocket 中,可以使用 CloseHandler
来判断 WriteMessage
的进度。在 CloseHandler
中,可以检查 err
参数是否为 nil
,如果不是,则表示写入消息时发生了错误。
另外,也可以在调用 WriteMessage
之前获取当前的连接状态,并保存下来。然后在 CloseHandler
中,可以再次获取连接状态,并和之前保存的状态比较,来确定消息是否已经完全写入。
例如:
func main() {
// 创建 WebSocket 服务器
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
conn, err := websocket.Upgrade(w, r, nil, 1024, 1024)
if err != nil {
log.Println(err)
return
}
// 获取当前连接状态
state := conn.WriteState()
// 发送消息
err = conn.WriteMessage(websocket.TextMessage, []byte("Hello, world!"))
if err != nil {
log.Println(err)
return
}
// 检查消息写入进度
conn.SetCloseHandler(func(code int, text string) error {
// 获取当前连接状态
currentState := conn.WriteState()
// 判断消息是否已经完全写入
if currentState != state {
log.Println("message partially written")
}
return nil
})
})
// 启动服务器
http.ListenAndServe(":8080", nil)
}