Go WebSocket ライブラリは、切断を処理する CloseHandler メカニズムを提供します。 Conn タイプは、クライアントが接続を閉じるときに Close イベントを起動します。 defer ステートメントを使用して CloseHandler 関数を登録し、イベントをリッスンし、Conn 定数と closereason 定数を受け取ります。 CloseHandler 関数が自動的に呼び出され、切断を処理してアプリケーションを再開する機会が提供されます。
WebSocket を使用する: 切断を適切に処理します
リアルタイム Web アプリケーションを構築する場合、WebSocket はクライアントとサーバー間の双方向通信のための強力なツールです。ただし、アプリケーションの安定性と信頼性を確保するには、クライアントの切断を処理することが重要です。
切断の処理
Go WebSocket ライブラリは、切断を処理するための組み込みメカニズムを提供します。クライアントが接続を閉じると、[Conn
](https://pkg.go.dev/github.com/gorilla/websocket#Conn) タイプによって Close
がトリガーされます。イベント 。 Conn
](https://pkg.go.dev/github.com/gorilla/websocket#Conn) 类型会触发 Close
事件。
要监听此事件,可以使用 defer
语句将 [CloseHandler
](https://pkg.go.dev/github.com/gorilla/websocket#CloseHandler) 函数注册到 WebSocket 连接:
import ( "github.com/gorilla/websocket" ) func handleConnection(ws *websocket.Conn) { defer ws.CloseHandler()(ws, websocket.CloseNormalClosure) // ... }
CloseHandler
函数接受两个参数:*Conn
和一个表示关闭原因的常量(例如 websocket.CloseNormalClosure
表示正常关闭)。当连接被关闭时,该函数将被自动调用。
实战案例
以下是一个处理断开连接的简单实战案例:
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) }
在处理断开连接方面,CloseHandler
defer
ステートメントを使用して [CloseHandler
](https://pkg.go.dev/github.com/gorilla/websocket) を実行できます。 #CloseHandler) WebSocket 接続に登録された関数: 🎜rrreee🎜CloseHandler
この関数は 2 つのパラメーターを受け入れます: *Conn
と閉じた理由を示す定数 (websocket など) .CloseNormalClosure
は通常のシャットダウンを意味します)。この関数は、接続が閉じられると自動的に呼び出されます。 🎜🎜🎜実際的なケース🎜🎜🎜 以下は、切断を処理する簡単な実際的なケースです: 🎜rrreee🎜 切断の処理に関して、CloseHandler
は、アプリケーションがクライアントから回復するのに役立つシンプルかつエレガントな方法を提供します。切断イベントが発生し、正常に機能し続けます。 🎜以上がGo WebSocket は切断をどのように処理しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。