WebSocket テクノロジの普及に伴い、WebSocket 機能を実装するために Go 言語を使用するプログラマが増えています。 WebSocket 関数を実装する過程で、プログラマは多くの場合、Go 言語コードで WebSocket 接続を正しく閉じる方法という重要な問題に直面します。この記事では、Go で WebSocket 接続を適切に閉じる方法について説明します。
WebSocket 接続を終了するには 2 つの方法があります:
Go 言語では、WebSocket 接続の Close() メソッドを呼び出して WebSocket 接続を閉じることができます。 WebSocket 接続をアクティブに閉じたい場合は、クライアント側またはサーバー側でこのメソッドを呼び出すことができます。 WebSocket 接続を受動的に閉じる場合は、サーバー側で読み取りおよび書き込み操作を検出できます。接続例外が検出されたら、Close() メソッドを呼び出して WebSocket 接続を閉じます。
以下は、Go で WebSocket 接続を閉じるためのサンプル コードです:
func handleWebSocket(w http.ResponseWriter, r *http.Request) { conn, err := upgrader.Upgrade(w, r, nil) if err != nil { log.Println("upgrade:", err) return } defer conn.Close() Loop: for { messageType, message, err := conn.ReadMessage() if err != nil { if websocket.IsUnexpectedCloseError(err, websocket.CloseGoingAway, websocket.CloseAbnormalClosure) { log.Printf("error: %v", err) } break Loop } // handle message } }
上記のコードでは、Gorilla WebSocket が提供する Upgrade() メソッドを使用して、HTTP 接続をWebSocket接続。 WebSocket 接続を処理するときは、ループを使用して WebSocket メッセージを読み取り、接続例外が検出されたときに Close() メソッドを呼び出して WebSocket 接続を閉じます。
WebSocket 接続を閉じるときは、リソース リークを避ける必要があることに注意してください。上記のコードでは、関数を終了するときに defer を使用して WebSocket 接続を閉じています。これにより、関数の処理中に例外が発生した場合でも、WebSocket 接続が時間内に閉じられ、リソース リークが回避されます。
この記事の導入部を通じて、読者は Go で WebSocket 接続を正しく閉じる方法をある程度理解できたと思います。実際の開発プロセスでは、特定のアプリケーション シナリオに応じて WebSocket 接続の終了方法を選択する必要があります。アクティブ クローズでもパッシブ クローズでも、WebSocket 接続を閉じるときにリソース リークを回避し、プログラムの安定した動作を保証する必要があります。
以上がGo で WebSocket 接続を適切に閉じる方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。