ホームページ >バックエンド開発 >Golang >Go WebSocket は切断をどのように処理しますか?

Go WebSocket は切断をどのように処理しますか?

WBOY
WBOYオリジナル
2024-06-03 10:38:581013ブラウズ

Go WebSocket ライブラリは、切断を処理する CloseHandler メカニズムを提供します。 Conn タイプは、クライアントが接続を閉じるときに Close イベントを起動します。 defer ステートメントを使用して CloseHandler 関数を登録し、イベントをリッスンし、Conn 定数と closereason 定数を受け取ります。 CloseHandler 関数が自動的に呼び出され、切断を処理してアプリケーションを再開する機会が提供されます。

Go WebSocket 如何处理断开连接?

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

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