Go WebSocket library provides CloseHandler mechanism to handle disconnection. The Conn type fires the Close event when the client closes the connection. Use the defer statement to register the CloseHandler function to listen to the event and receive Conn and close reason constants. The CloseHandler function is automatically called, providing an opportunity to handle the disconnect and resume the application.
Go WebSocket: Handling Disconnects Gracefully
WebSocket is a powerful tool when building real-time web applications , used for bidirectional communication between client and server. However, it is critical to handle client disconnections to ensure application stability and reliability.
Handling Disconnects
The Go WebSocket library provides built-in mechanisms for handling disconnects. The [Conn
](https://pkg.go.dev/github.com/gorilla/websocket#Conn) type fires the Close
event when the client closes the connection.
To listen to this event, you can use the defer
statement to [CloseHandler
](https://pkg.go.dev/github.com/gorilla/websocket# CloseHandler) function registered to the WebSocket connection:
import ( "github.com/gorilla/websocket" ) func handleConnection(ws *websocket.Conn) { defer ws.CloseHandler()(ws, websocket.CloseNormalClosure) // ... }
CloseHandler
The function accepts two parameters: *Conn
and a constant indicating the reason for closing (for example, websocket. CloseNormalClosure
means normal shutdown). This function will be called automatically when the connection is closed.
Practical case
The following is a simple practical case for handling disconnection:
package main import ( "fmt" "github.com/gorilla/websocket" "net/http" ) func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { ws, err := websocket.Upgrade(w, r, nil, nil, nil) if err != nil { fmt.Printf("upgrade error: %v", err) return } defer ws.CloseHandler()(ws, websocket.CloseNormalClosure) // 监听消息和断开连接事件 go func() { for { _, _, err := ws.ReadMessage() if err != nil { // 处理错误(例如连接断开) return } } }() }) http.ListenAndServe(":8080", nil) }
In terms of handling disconnection, CloseHandler
Provides a simple and elegant way to help applications recover from client disconnect events and continue to function normally.
The above is the detailed content of How does Go WebSocket handle disconnections?. For more information, please follow other related articles on the PHP Chinese website!