ホームページ > バックエンド開発 > Golang > Go で WebSocket 接続を適切に閉じる方法

Go で WebSocket 接続を適切に閉じる方法

PHPz
リリース: 2023-04-10 14:26:34
オリジナル
1931 人が閲覧しました

WebSocket テクノロジの普及に伴い、WebSocket 機能を実装するために Go 言語を使用するプログラマが増えています。 WebSocket 関数を実装する過程で、プログラマは多くの場合、Go 言語コードで WebSocket 接続を正しく閉じる方法という重要な問題に直面します。この記事では、Go で WebSocket 接続を適切に閉じる方法について説明します。

WebSocket 接続の終了メソッド

WebSocket 接続を終了するには 2 つの方法があります:

  1. アクティブな終了メソッド: クライアントまたはサーバーは終了メッセージを送信することで終了できます。繋がり。
  2. パッシブクローズ方式: TCP 接続が切断されるか、例外メッセージを受信すると、WebSocket 接続もクローズされます。

GO 言語で WebSocket 接続を閉じる

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート