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

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

PHPz
PHPzオリジナル
2023-04-05 13:47:161494ブラウズ

Golang の WebSocket は、リアルタイムで通信する方法を提供する強力なネットワーク プログラミング ツールです。 WebSocket を使用して通信する場合、WebSocket 接続を閉じる必要がある状況が発生することがあります。では、Golang で WebSocket 接続を正しく閉じるにはどうすればよいでしょうか?この記事では詳しく紹介していきます。

Golang では、標準ライブラリの net/http および github.com/gorilla/websocket ライブラリを使用して、WebSocket 接続を実装できます。どちらの場合も、WebSocket 接続を閉じるためのメソッドがあります。

標準ライブラリで WebSocket 接続を閉じる

標準ライブラリでは、WebSocket の close メソッドを使用して接続を閉じることができます。 close メッセージを受信したら、WebSocket の close メソッドを呼び出して接続を閉じることができます。コード例は次のとおりです。

func main() {
    http.HandleFunc("/ws", websocketHandler)
    http.ListenAndServe(":8080", nil)
}
func websocketHandler(w http.ResponseWriter, r *http.Request) {
    upgrader := websocket.Upgrader{
        ReadBufferSize:  1024,
        WriteBufferSize: 1024,
    }
    conn, err := upgrader.Upgrade(w, r, nil)
    if err != nil {
        log.Fatal("Upgrade: ", err)
    } 
    defer conn.Close() // 关闭 WebSocket 连接

    // 读写逻辑
}

上記の例では、標準ライブラリの WebSocket パッケージを使用して WebSocket 接続を作成し、読み取りと実行の後に defer キーワードを介して conn.Close() メソッドを呼び出しました。書き込みロジックが完了し、接続が閉じられました。

ゴリラ/WebSocket ライブラリで WebSocket 接続を閉じる

ゴリラ/WebSocket ライブラリでは、WebSocket の Close メソッドを呼び出して接続を閉じることができます。コード例は次のとおりです。 ##

func main() {
    http.HandleFunc("/ws", websocketHandler)
    http.ListenAndServe(":8080", nil)
}
func websocketHandler(w http.ResponseWriter, r *http.Request) {
    upgrader := websocket.Upgrader{
        ReadBufferSize:  1024,
        WriteBufferSize: 1024,
    }
    conn, err := upgrader.Upgrade(w, r, nil)
    if err != nil {
        log.Fatal("Upgrade: ", err)
    } 
    defer conn.Close() // 关闭 WebSocket 连接

    // 读写逻辑
    // 关闭 WebSocket 连接
    conn.WriteMessage(websocket.CloseMessage, websocket.FormatCloseMessage(websocket.CloseNormalClosure, ""))
}
上記の例では、gorilla/websocket ライブラリを使用して WebSocket 接続を作成し、読み取りおよび書き込みロジックが終了した後、conn.WriteMessage メソッドを呼び出して終了メッセージを相手に送信しました。このようにして、相手は終了メッセージを受信することで接続を終了できます。

概要

標準ライブラリの WebSocket パッケージを使用している場合でも、ゴリラ/WebSocket ライブラリを使用している場合でも、対応する方法で WebSocket 接続を閉じることができます。実際の開発では、リアルタイム通信機能をより良く実現するために、実際の状況に応じて適切なWebSocketライブラリを選択する必要があります。

以上がGolang で WebSocket 接続を適切に閉じる方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。